Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.util.Map的交集_Java_Dictionary_Collections_Set Intersection - Fatal编程技术网

java.util.Map的交集

java.util.Map的交集,java,dictionary,collections,set-intersection,Java,Dictionary,Collections,Set Intersection,java.util.Map或任何util中是否有方法在两个地图上执行交集?(通过“键”使两张地图相交) 我找不到。我总是可以实现自己的交集逻辑,但我希望在java.util.*类中已经有一些操作可以实现这一点。要测试交集,可以使用containsAll()操作。如果此集合包含指定集合的所有元素,则返回true。如果指定的集合也是一个集合,则如果该集合是该集合的子集,则此方法返回true。” 要获取这些相交元素的集合,可以改用retainal()操作 这些方法都可以在这里找到 番石榴应该做这项工作

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


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

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

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

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

番石榴应该做这项工作,将每个地图的键集作为参数传入。

怎么样:

Map map1 = ...;
Map map2 = ...;
Map result = new ...(map1);
result.keySet().retainAll(map2.keySet());
或:


我推荐ApacheC

请执行以下操作:

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

在一个贴图的关键点上循环,查看它们是否在第二个贴图中:

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;
}

如果您使用的是番石榴,则可以使用获取对象,从中可以提取
entriesInCommon()
entriesdivating()
作为贴图。(披露:我为番石榴做了贡献。)

你想知道一张地图上的键是否也是另一张地图上的键吗?值也很重要,还是仅仅是键才重要?@dashrb:只有键,而不是值。@mandy,请用这些信息更新您的问题。:-)我有两张地图,map1和map2。我想在map1和map2之间执行交集。如果我尝试使用这种方法,我必须创建一个新的集合。这是一个可选操作,它对所有这样的键集都有效吗。它将使用java.util.*集合和并发集合。我希望它能与所有流行的可变映射实现一起工作,但显然您需要验证特定实现@鲁克:编辑得很好,谢谢。现在你有了一个
Map
,其中包含了
map1
中用于相交键的值。那么来自
map2
的这些值呢?公平点,我已经更新了答案,添加了一个仅获取一个集合的选项。我建议使用JRE方法,因为它似乎更适用。也就是说:并不是每个人都可以轻松地向其应用程序添加依赖项(例如,因为二进制大小是一个问题、官僚作风等),也不一定想要一些他们不需要的东西。你会如何将其转换回
映射
?这取决于你想对相交键对应的值做什么?OP似乎只关心键,所以这很好。但这不会给你相交。它只是告诉您一组关键点是否是另一组关键点的子集。找到交集意味着返回公共键/值。OP似乎只关心键。番石榴库在这方面没有明确的记录,但它似乎也在比较价值观,不是吗?请适当地编写文档。阅读
MapDifference
——它告诉您
EntriesDifferenting()
,例如,“返回一个不可修改的映射,描述出现在两个映射中的键,但具有不同的值。”Set intersection=new HashMap()?真的吗?哈哈哦。应该是“地图”。我来编辑。(感谢您在7年后注意到。我只能假设我的真实代码有类似的潜在但明显的bug!)您的代码帮助了我,这就是为什么我想纠正它:)谢谢!
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;
}