Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 找出两张地图之间的差异_Java_Guava - Fatal编程技术网

Java 找出两张地图之间的差异

Java 找出两张地图之间的差异,java,guava,Java,Guava,我有两张当前和以前的地图,我想看看这两张地图之间是否有任何区别。如果currentMap中存在新键,或者同一键的值不同,我可以停止 Map<String, String> previousValue; Map<String, String> currValue; boolean isChangePresent = currValue.entrySet().stream().anyMatch( x -> !previousVa

我有两张当前和以前的地图,我想看看这两张地图之间是否有任何区别。如果currentMap中存在新键,或者同一键的值不同,我可以停止

Map<String, String> previousValue;
Map<String, String> currValue;

boolean isChangePresent = currValue.entrySet().stream().anyMatch(
                    x -> !previousValue.containsKey(x.getKey()) ||
                        (previousValue.get(x.getKey()) != null && !previousValue.get(x.getKey()).equals(
                            x.getValue())));
Map-previousValue;
地图价值;
布尔值isChangePresent=currValue.entrySet().stream().anyMatch(
x->!previousValue.containsKey(x.getKey())||
(previousValue.get(x.getKey())!=null&&!previousValue.get(x.getKey())。等于(
x、 getValue());

有没有更好的方法来实现这一点,或者有一个内置的实用程序函数来实现这类功能?

由于您的键和值只是
字符串,它们的
.equals()
方法检查逻辑相等性(而不是检查它们是否具有相同的内存地址),因此您可以简单地使用

boolean check(Map<String, String> a, Map<String, String> b) {
     return a.equals(b);
}
请记住,
Map#keySet().retainal(集合c)
会修改基础映射,因此深度复制是为了防止对上一个映射进行更改。如果您可以更改上一张地图,那么您只需删除该方法主体的前三行,然后将番石榴中的
copyOfPrev
更改为
previous

MapDifference<String, String> mapDifference = Maps.difference(currValue, previousValue);

return !mapDifference.entriesOnlyOnLeft().isEmpty() 
        || !mapDifference.entriesDiffering().isEmpty();
MapDifference MapDifference=Maps.difference(currValue,previousValue);
回来!mapDifference.entriesOnlyOnLeft().isEmpty()
|| !mapDifference.EntriesDifferenting().isEmpty();

previousValue.equals(currValue)
有什么问题?@AndyTurner它不执行OP似乎要求的操作:即检查currValue中的所有条目是否包含在previousValue中。i、 例如:
previousValue.entrySet().containsAll(currValue.entrySet())
为什么不简单地使用
previousValue.entrySet().containsAll(currValue.entrySet())
?@JBNizet是的,这是一种更好的方法,我没有意识到你在放置entrySet。我的建议是用一种更为手工的方式来完成你的建议。虽然有些东西告诉我OP真的只是想检查地图是否完全相等,但措辞暗示了你在这里提到的。
MapDifference<String, String> mapDifference = Maps.difference(currValue, previousValue);

return !mapDifference.entriesOnlyOnLeft().isEmpty() 
        || !mapDifference.entriesDiffering().isEmpty();