我有两个Map当前和以前,我想看看是否有任何区别,这两个Map。如果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())));
有没有更好的方法来实现这一点,或者有一个内置的实用函数来实现这类功能?
2条答案
按热度按时间mwg9r5ms1#
Guava:
https://www.leveluplunch.com/java/examples/guava-map-difference-example/
4dc9hkyq2#
因为你的钥匙和价值观
Strings
,他们的.equals()
方法检查逻辑相等性(而不是检查它们是否具有相同的内存地址),因此您可以简单地使用只是要小心,因为如果你有,例如,两个类型的Map
Map<K,V>
哪里V
没有覆盖.equals()
方法,默认值等于V
如果不检查逻辑相等性,则它将不起作用。编辑:
仔细看你的措辞,你认为如果
keySet
的previousMap
包含的所有键currentMap
但是currentMap
密钥少于previousMap
? 如果你认为没有变化,那么你需要做的是记住
Map<K, V>#keySet().retainAll(Collection<K> c)
修改基础Map,因此深度复制是为了防止更改上一个Map。如果您同意更改上一个Map,那么您可以删除该方法主体的前三行,然后更改copyOfPrev
至previous
.