Java 8 stream. alle Elemente, mit AUSNAHME von anderen Elementen
Ich bin interessiert bei der Suche nach einem Ansatz, gibt eine Liste der Elemente mit Ausnahme der Elemente in eine andere Liste.
beispielsweise
List<Integer> multiplesOfThree = ... //3,6,9,12 etc
List<Integer> evens = ... //2,4,6,8 etc
List<Integer> others = multiplesOfThree.except(evens) //should return a list of elements that are not in the other list
wie tun Sie dies?
ich fand einen Ansatz, der ist ein bisschen klobig und schwer zu Lesen....
multiplesOfThree.stream()
.filter(intval -> evens.stream().noneMatch(even -> even.intValue() == intval.intValue()))
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie
Stream
's- filter
Methode, vorbei an einemPredicate
dafür sorgt, dass das element nicht vorhanden istevens
.Aber vorausgesetzt, Sie haben ein veränderliches
List
(z.B.ArrayList
), brauchen Sie nicht einmal streams, nurSammlungen
s,removeAll
Methode.Könnten Sie
oder effizienter für große
even
ListenGibt es ein paar Lösungen.
Erste, ohne Verwendung von streams, können Sie einfach erstellen Sie eine neue Liste und entfernen Sie alle Elemente aus einer anderen Sammlung von er...
Andere Lösung wäre, das passieren der Strom durch ein filter():
(Möchten Sie vielleicht in Betracht ziehen
evens
eineSet
in diesem Fall).Und schließlich könnten Sie ändern die Logik, die oben für die Darstellung der "evens" als eine Funktion eher als eine Sammlung aller geraden zahlen. Dies ist im wesentlichen der gleiche wie oben, aber Sie nicht haben, um eine zweite Sammlung.