我有以下问题,我正在比较两个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()));
有人可以指出我正确的方向吗?
答案 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);