2016-10-19 38 views
1

我有以下问题,我正在比较两个哈希集合(都带有字符串值)。我需要比较两个哈希集来保持在设定A,其也存在于集合B中只有数据:比较2个Java哈希集合中的键值

集A具有以下值:

[YNVOTXAguONvMRiK8C6WzGAUlyf2] 
[YADfoWtZXSUtrMhN2JfhnS5lJYE3] 

B组有此值:

[YADfoWtZXSUtrMhN2JfhnS5lJYE3] 

正如你可以看到,集合A的第二个键和集合B中的键是相同的。然而,当我比较使用下面的代码两组,结果我得到的是false

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

可有人请点我在正确的方向?

+0

你是不是比较键但是整个keySet。 – tak3shi

+0

@ tak3ski你如何比较密钥? –

+0

这个问题不应该有'android'标签 – Beloo

回答

3

为了计算共同要素(路口)到两套,您可以使用方法:

Set#retainAll(Collection c) 

在你的榜样,你是否集包含的keySet,你应该检查一个值,所以它可能是:

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

不客气:) –

1
contains(userId.keySet()) 

这里有你检查是否设定一个具有由userId.keySet返回集合对象()...

当然

这将返回false。

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); 
+0

感谢队友,它工作:) –