比较2个Java哈希集中的键值

时间:2016-10-19 09:56:37

标签: java hashset

我有以下问题,我正在比较两个Hash集(两者都包含String值)。我需要将两个哈希集比较为仅保留集合A中的数据,这也存在于集合B中:

Set A具有以下值:

[YNVOTXAguONvMRiK8C6WzGAUlyf2] 
[YADfoWtZXSUtrMhN2JfhnS5lJYE3]

Set B有这个值:

[YADfoWtZXSUtrMhN2JfhnS5lJYE3]

您可以注意到,集合A的第二个密钥和集合B中的密钥是相同的。但是,当我使用下面的代码比较两个集合时,得到的结果是false

Log.e("boolean value", "" + chatList.get(i).userId.keySet().contains(userId.keySet()));

有人可以指出我正确的方向吗?

3 个答案:

答案 0 :(得分:3)

要计算两个集合的公共(交集)元素,可以使用方法:

contains(userId.keySet())

在你的例子中,你检查set是否包含keySet,你应该检查一个值,所以它可能是:

Set#retainAll(Collection c) 

答案 1 :(得分:1)

Views

这里是你检查set one是否有userId.keySet()返回的集合对象 ...

当然这会返回false。

答案 2 :(得分:1)

正如Krzysztof所提到的,你可以使用Set#retainAll(Collection c)来获得两组的交集。然而,这将修改现有的集合。如果您不想修改现有的设置,可以使用以下两种方法之一:

使用Java 8:

Set<String> intersection = a.stream()
                            .filter(b::contains)
                            .collect(Collectors.toSet());

没有Java 8:

Set<String> intersection = new HashSet<>(a);
intersection.retainAll(b);