java.util.Map的交集

时间:2012-11-01 15:39:13

标签: java dictionary collections set-intersection

java.util.Map或任何工具中是否有方法在两张地图上执行交集? (通过“键”交叉两个地图)

我找不到任何东西。我总是可以实现自己的交集逻辑,但我希望在其中一个java.util.*类中已经有一些操作可以执行此操作。

6 个答案:

答案 0 :(得分:44)

怎么样:

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());

答案 1 :(得分:13)

如果您正在使用Guava,则可以使用Maps.difference获取MapDifference对象,您可以从中提取entriesInCommon()entriesDiffering()作为地图。 (披露:我向Guava捐款。)

答案 2 :(得分:4)

Guava的Sets.intersection(Set, Set)应该完成这项工作,每个Map的keySet作为参数传入。

答案 3 :(得分:0)

要测试交集,可以使用containsAll()操作。如果此集合包含指定集合的​​所有元素,则返回true。如果指定的集合也是一个集合,则此方法如果是此集合的子集则返回true。“

要获取这些相交元素的集合,可以使用retainAll()操作。

这些方法都在这里找到

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Set.html

答案 4 :(得分:0)

我建议使用apache c ollectionUtils#intersection

执行以下操作:

 Collection intersection=    
      CollectionUtils.intersection(map1.keySet(),map2.keySet());

答案 5 :(得分:0)

遍历一张地图的键,看看它们是否在第二张地图中:

private Map getIntersection(Map mapOne, Map mapTwo)
{
    Set intersection = new HashMap();
    for (Object key: mapOne.keySet())
    {
        if (mapTwo.containsKey(key))
           intersection.put(key, mapOne.get(key));
    }
    return intersection;
}