44

是否有java.util.Map在两张地图上执行交叉路口的方法或任何实用程序?(通过“键”与两个地图相交)

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

4

6 回答 6

56

怎么样:

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());
于 2012-11-01T15:43:21.060 回答
15

如果您使用 Guava,您可以使用Maps.difference获取一个MapDifference对象,您可以从中提取entriesInCommon()entriesDiffering()作为地图。(披露:我为 Guava 做出了贡献。)

于 2012-11-01T16:07:31.533 回答
4

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

于 2012-11-01T15:43:17.387 回答
0

我会推荐 apache collectionUtils#intersection

请执行下列操作:

 Collection intersection=    
      CollectionUtils.intersection(map1.keySet(),map2.keySet());
于 2012-11-01T15:46:03.120 回答
0

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

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

这些方法都可以在这里找到

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

于 2012-11-01T15:43:10.443 回答
0

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

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;
}
于 2012-11-01T15:49:40.347 回答