Frage

Das heißt, wenn ich habe zwei oder mehr Sätze, und ich wollte einen neuen Satz zurückzukehren, die entweder:

  1. Alle Elemente jeder Satz gemeinsam hat (AND).
  2. Alle Elemente insgesamt jeden Satz (OR).
  3. Alle Elemente einzigartig für jeden Satz. (XOR).

Gibt es eine einfache, bereits bestehende Möglichkeit, das zu tun?

Edit:? Das ist die falsche Terminologie, es ist nicht

War es hilfreich?

Lösung

Unter der Annahme, 2 Set-Objekte a und b

AND (Schnittpunkt von zwei Sets)

a.retainAll(b); 

OR (Vereinigung von zwei Sets)

a.addAll(b);

XOR entweder eigene Schleife rollen:

foreach item
if(a.contains(item) and !b.contains(item) ||  (!a.contains(item) and b.contains(item)))
 c.add(item)

oder dies tun:

c.addAll(a); 
c.addAll(b);
a.retainAll(b); //a now has the intersection of a and b
c.removeAll(a); 

Sehen Sie die Dokumentationsset und diese . Für mehr.

Andere Tipps

Sie können mit der Google-Kollektionen Sets Klasse , die die Methoden Kreuzung () union () und Mengenlehre # Differenz und Komplement ().

Sets.intersection(set1, set2);
Sets.union(set1, set2);

SetView view = Sets.intersection(Sets.union(set1, set2), set3);
Set result = view.copyInto(new HashSet());

@Milhous sagte:

  

überprüfen Sie die Sätze api aus. wenn du benutzt   oder addAll Sie bekommen können. Wenn du benutzt   retainAll Sie können das und bekommen. ich nicht   weiß um die Xor.

Es scheint, als wenn Sie hatte Sets s1 und s2 Sie könnten dies tun XOR zu bekommen:

  1. die eingestellte s1 kopieren s3
  2. s1.removeAll(s2); (S1 enthält nun alle Elemente, die nicht in s2)
  3. s2.removeAll(s3); (S2 enthält nun alle Elemente, die nicht in s3 = die alten s1)
  4. s1.addAll(s2); (S1 enthält nun die Vereinigung der beiden oben genannten Sets)

die Sätze überprüfen api . wenn Sie addAll verwenden, können Sie oder erhalten. Wenn Sie retainAll können Sie das und bekommen. Ich weiß nicht, über die Xor.

Edit:. aus der Menge Dokumentation

... Wenn die angegebene Sammlung auch ein Satz ist, der addAll Betrieb ändert effektiv diesen Satz, so dass dessen Wert die Vereinigung der beiden Sätze ist.

.... Wenn die angegebene Sammlung auch ein Satz ist, ändert dieser Vorgang effektiv diesen Satz so, dass der Wert der Schnittpunkt der beiden Sätze ist.

Ich bin mir ziemlich sicher, dass Jakarta gemeinsame Sammlungen API unterstützt Gewerkschaften, Kreuzungen usw.

Ich wäre erstaunt, wenn die Google Collections-API nicht so gut getan hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top