Я искал другую проблему и наткнулся на это, поэтому добавлю свое решение к связанной проблеме: сравнивая два Maps.
// make a copy of the data
Map<String,String> a = new HashMap<String,String>(actual);
Map<String,String> e = new HashMap<String,String>(expected);
// check *every* expected value
for(Map.Entry<String, String> val : e.entrySet()){
// check for presence
if(!a.containsKey(val.getKey())){
System.out.println(String.format("Did not find expected value: %s", val.getKey()));
}
// check for equality
else{
if(0 != a.get(val.getKey()).compareTo(val.getValue())){
System.out.println(String.format("Value does not match expected: %s", val.getValue()));
}
// we have found the item, so remove it
// from future consideration. While it
// doesn't affect Java Maps, other types of sets
// may contain duplicates, this will flag those
// duplicates.
a.remove(val.getKey());
}
}
// check to see that we did not receive extra values
for(Map.Entry<String,String> val : a.entrySet()){
System.out.println(String.format("Found unexpected value: %s", val.getKey()));
}
Он работает по тому же принципу, что и другие решения, но и сравнивает не только значения присутствуют, но они содержат одинаковое значение. В основном я использовал это программное обеспечение бухгалтерского учета при сравнении данных из двух источников (Сотрудник и менеджер Введенных значений спички; клиентов и корпоративные сделки спичка; ... и т.д.)
У guava есть некоторые инструменты для различий, но это для 'Set', я думаю, что' removeAll' может вам подойдет здесь –
Скопируйте список 'a'. Удалите все элементы, которые отображаются в 'b' из копии. –
https://docs.oracle.com/javase/7/docs/api/java/util/List.html#removeAll%28java.util.Collection%29 –