是否有java.util.Map
在两张地图上执行交叉路口的方法或任何实用程序?(通过“键”与两个地图相交)
我找不到任何东西。我总是可以实现自己的交集逻辑,但我希望其中一个java.util.*
类中已经有一些操作可以做到这一点。
是否有java.util.Map
在两张地图上执行交叉路口的方法或任何实用程序?(通过“键”与两个地图相交)
我找不到任何东西。我总是可以实现自己的交集逻辑,但我希望其中一个java.util.*
类中已经有一些操作可以做到这一点。
怎么样:
Map map1 = ...;
Map map2 = ...;
Map result = new ...(map1);
result.keySet().retainAll(map2.keySet());
或者:
Map map1 = ...;
Map map2 = ...;
Set result = new ...(map1.keySet());
result.retainAll(map2.keySet());
如果您使用 Guava,您可以使用Maps.difference
获取一个MapDifference
对象,您可以从中提取entriesInCommon()
和entriesDiffering()
作为地图。(披露:我为 Guava 做出了贡献。)
番石榴Sets.intersection(Set, Set)
应该完成这项工作,每个 Map 的 keySet 作为参数传入。
我会推荐 apache collectionUtils#intersection
请执行下列操作:
Collection intersection=
CollectionUtils.intersection(map1.keySet(),map2.keySet());
要测试交叉点,您可以使用 containsAll() 操作。'如果此集合包含指定集合的所有元素,则返回 true。如果指定的集合也是一个集合,如果它是这个集合的一个子集,这个方法返回 true。
要获取这些相交元素的集合,您可以使用 retainAll() 操作。
这些方法都可以在这里找到
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Set.html
循环遍历一张地图的键,看看它们是否在第二张地图中:
private Map getIntersection(Map mapOne, Map mapTwo)
{
Map intersection = new HashMap();
for (Object key: mapOne.keySet())
{
if (mapTwo.containsKey(key))
intersection.put(key, mapOne.get(key));
}
return intersection;
}