如何比较Java中的两个哈希映射
嗨,我正在使用Java中的HashMap,我有一个场景,我必须比较2个HashMaps
HashMap1: Key: BOF Value: SAPF Key: BOM Value: SAPM Key: BOL Value: SAPL HashMap2: Key: BOF Value: Data1 Key: BOL Value: Data2
在比较这两个哈希映射之后,我得到的hashmap将包含Key作为First HashMap1的值,Value作为第二个HashMap2的值。
HashMap3: Key: SAPF Value: Data1 Key: SAPL Value: Data2
只需迭代HashMap1
的键,并为每个键检查它是否存在于HashMap2
。 如果它存在,请将值添加到HashMap3
:
final Map hm1 = new HashMap(); hm1.put("BOF", "SAPF"); hm1.put("BOM", "SAPM"); hm1.put("BOL", "SAPL"); final Map hm2 = new HashMap(); hm2.put("BOF", "Data1"); hm2.put("BOL", "Data2"); final Map hm3 = new HashMap(); for (final String key : hm1.keySet()) { if (hm2.containsKey(key)) { hm3.put(hm1.get(key), hm2.get(key)); } }
如果第二个映射具有相同键的值,则迭代第一个映射的键并将值放入新映射中。
Map map3 = new HashMap(); for (Object key : map1.keySet()) { Object value2 = map2.get(key); if (value2 != null) { Object value1 = map1.get(key); map3.put(value1, value2); } }
HashMap有一个名为entrySet()
的方法,它返回一个对象,该对象将地图内容表示为一组键值对。
public Set> entrySet()
您应该使用键遍历该集合以在第二个映射中查找,然后将结果放入“结果集”中。
我假设您已经确定第一组中的值将是唯一的,或者您不介意条目可能会在输出中被覆盖。
请注意,迭代器以未指定的顺序在集合中移动,因此如果存在覆盖,则此方法将无法保证哪些值会覆盖哪些其他值。
您可以使用两个贴图的keySet来使用它们相交:
boolean retainAll(Collection> c)
然后在构建解决方案的tho地图上使用该交集进行迭代。