本文介绍了Java比较两个地图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在java中,我想比较两个地图,如下所示,我们是否有现有的API来执行此操作?
In java, I want to compare two maps, like below, do we have existing API to do this ?
谢谢
Map<String, String> beforeMap ;
beforeMap.put("a", "1");
beforeMap.put("b", "2");
beforeMap.put("c", "3");
Map<String, String> afterMap ;
afterMap.put("a", "1");
afterMap.put("c", "333");
//--- it should give me:
b is missing, c value changed from '3' to '333'
推荐答案
我使用Set的removeAll()功能来设置键的差异以查找添加和删除。可以通过使用条目设置为HashMap来执行设置差异来检测实际更改.Entry使用键和值实现equals()。
I'd use removeAll() functionality of Set to to do set differences of keys to find additions and deletions. Actual changes can be detected by doing a set difference using the entry set as HashMap.Entry implements equals() using both key and value.
Set<String> removedKeys = new HashSet<String>(beforeMap.keySet());
removedKeys.removeAll(afterMap.keySet());
Set<String> addedKeys = new HashSet<String>(afterMap.keySet());
addedKeys.removeAll(beforeMap.keySet());
Set<Entry<String, String>> changedEntries = new HashSet<Entry<String, String>>(
afterMap.entrySet());
changedEntries.removeAll(beforeMap.entrySet());
System.out.println("added " + addedKeys);
System.out.println("removed " + removedKeys);
System.out.println("changed " + changedEntries);
输出
added []
removed [b]
changed [c=333]
这篇关于Java比较两个地图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!