2016-10-19 70 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

感謝隊友,它工作:) –