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

比较两个Java哈希集中的键值,java,hashset,Java,Hashset,我有以下问题,我比较两个散列集(都有字符串值)。我需要将两个散列集进行比较,以仅保留集A中的数据,该数据也存在于集B中: 集合A具有以下值: [YNVOTXAguONvMRiK8C6WzGAUlyf2] [YADfoWtZXSUtrMhN2JfhnS5lJYE3] 集合B具有此值: [YADfoWtZXSUtrMhN2JfhnS5lJYE3] 正如您所注意到的,集合A中的第二个键和集合B中的键是相同的。但是,当我使用下面的代码比较这两个集合时,得到的结果是false: Log.e("boo

我有以下问题,我比较两个散列集(都有字符串值)。我需要将两个散列集进行比较,以仅保留集A中的数据,该数据也存在于集B中:

集合A具有以下值:

[YNVOTXAguONvMRiK8C6WzGAUlyf2] 
[YADfoWtZXSUtrMhN2JfhnS5lJYE3]
集合B具有此值:

[YADfoWtZXSUtrMhN2JfhnS5lJYE3]
正如您所注意到的,集合A中的第二个键和集合B中的键是相同的。但是,当我使用下面的代码比较这两个集合时,得到的结果是
false

Log.e("boolean value", "" + chatList.get(i).userId.keySet().contains(userId.keySet()));
有人能给我指一下正确的方向吗

contains(userId.keySet())
您正在检查set one是否具有userId.keySet()返回的集合对象

当然,这将返回false

您正在检查set one是否具有userId.keySet()返回的集合对象


当然,这将返回false。

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

Set#retainAll(Collection c) 
在您的示例中,如果检查set是否包含keySet,则应该检查一个值,因此它可以是:

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

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

Set#retainAll(Collection c) 
在您的示例中,如果检查set是否包含keySet,则应该检查一个值,因此它可以是:

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

正如Krzysztof所提到的,您可以使用
Set#retainal(集合c)
获得两个集合的交集。但是,这将修改现有集。如果不想修改现有集,可以使用以下两种方法之一:

使用Java 8:

Set<String> intersection = a.stream()
                            .filter(b::contains)
                            .collect(Collectors.toSet());
Set intersection=a.stream()
.filter(b::contains)
.collect(收集器.toSet());
没有Java 8:

Set<String> intersection = new HashSet<>(a);
intersection.retainAll(b);
Set intersection=新HashSet(a);
交叉口。保留(b);

正如Krzysztof所提到的,您可以使用
Set#retainal(集合c)
获得两个集合的交点。但是,这将修改现有集。如果不想修改现有集,可以使用以下两种方法之一:

使用Java 8:

Set<String> intersection = a.stream()
                            .filter(b::contains)
                            .collect(Collectors.toSet());
Set intersection=a.stream()
.filter(b::contains)
.collect(收集器.toSet());
没有Java 8:

Set<String> intersection = new HashSet<>(a);
intersection.retainAll(b);
Set intersection=新HashSet(a);
交叉口。保留(b);

您不是在比较键,而是在比较整个键集。@tak3ski如何比较键?这个问题不应该有
android
tag您的检查是a.keySet包含b.keySet对象(不是它的内容),请尝试
containsAll()
你不是在比较钥匙,而是在比较整个钥匙集。@tak3ski你是如何比较钥匙的?这个问题不应该有
android
标记你的检查是a.keySet包含b.keySet对象(不是它的内容),试试
containsAll()
谢谢伙计,它起作用了:)谢谢伙计,它起作用了:)