Java 8 flux de données. tous les éléments à l'EXCEPTION des autres éléments
Je suis intéressé dans l'identification d'une approche qui renvoie la liste des éléments à l'exclusion des éléments dans une autre liste.
par exemple
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
comment faites-vous cela?
j'ai trouvé une approche qui est un peu maladroit et difficile à lire....
multiplesOfThree.stream()
.filter(intval -> evens.stream().noneMatch(even -> even.intValue() == intval.intValue()))
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
Stream
dufiltre
méthode, le passage d'unPredicate
qui assure que l'élément n'existe pas dansevens
.Mais en supposant que vous avez une mutable
List
(par exempleArrayList
), vous n'avez même pas besoin de ruisseaux, justeCollections
sremoveAll
méthode.Vous pouvez utiliser
ou plus efficace pour les gros
even
listesIl y a quelques solutions.
Tout d'abord, sans l'aide de flux, vous pouvez simplement créer une nouvelle liste et supprimer tous les éléments d'une autre collection d'elle...
Une autre solution serait de passer du courant à travers un filtre():
(Vous pouvez envisager de faire
evens
unSet
dans ce cas).Et enfin, vous pourriez modifier la logique ci-dessus représente la "evens" comme une fonction plutôt qu'une collection de tous les nombres pairs. C'est essentiellement le même que ci-dessus, mais vous n'avez pas à avoir un deuxième collection.