2016-10-19 1 views
1

Ich habe das folgende Problem, wobei ich zwei Hash-Sätze (beide mit String-Werten in ihnen) vergleichen. Ich brauche beide Hash-Sets zu vergleichen, um zu in nur die Daten halten gesetzt A, die ebenfalls in der Serie B vorhanden ist:Vergleichen der Schlüsselwerte in 2 Java Hash-Sets

Set A hat folgende Werte:

[YNVOTXAguONvMRiK8C6WzGAUlyf2] 
[YADfoWtZXSUtrMhN2JfhnS5lJYE3] 

Set B diesen Wert hat:

[YADfoWtZXSUtrMhN2JfhnS5lJYE3] 

Wie Sie sehen können, sind der 2. Schlüssel von Satz A und der Schlüssel in Satz B identisch. Allerdings, wenn ich beide Sätze mit dem Code unten vergleichen, erhalten das Ergebnis, das ich ist false:

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

Kann mir bitte jemand in die richtige Richtung?

+0

Sie sind nicht Vergleichen Sie die Tasten, aber den ganzen keySet. – tak3shi

+0

@ tak3ski Wie vergleichen Sie die Schlüssel? –

+0

Diese Frage sollte nicht "android" -Tag haben – Beloo

Antwort

3

Elemente zu berechnen häufig (Kreuzung) auf zwei Sätze, Sie Methode verwenden können:

Set#retainAll(Collection c) 

In Ihrem Beispiel Sie prüfen, ob Satz keySet enthält, sollten Sie für einen Wert überprüfen, es könnte so sein:

+0

Gern geschehen :) –

1
contains(userId.keySet()) 

hier überprüfen Sie, wenn der Satz hat man das Sammelobjekt zurück von userId.keySet() ...

natürlich diese falsch zurück.

1

Wie Krzysztof erwähnt, können Sie Set#retainAll(Collection c) verwenden, um die Schnittmenge der beiden Sätze zu erhalten. Dies ändert jedoch die bestehende Menge. Wenn Sie möchten, dass das bestehende Set nicht ändern, können Sie eine der beiden folgenden Ansätze verwenden:

Mit Java 8:

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

Ohne Java 8:

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

Danke Kumpel, es hat funktioniert :) –