java - 8 filtre une liste sans créer une nouvelle liste


Je cherche le moyen le plus propre de filtrer une liste en Java-8, avec un simple lambda Predicate, sans créer une nouvelle liste .

En particulier, cette solution ne convient pas, car toList() renvoie un nouveau List:

List<Person> beerDrinkers = persons.stream()
    .filter(p -> p.getAge() > 16)
    .collect(Collectors.toList());

Notez que la solution suivante ne fonctionne pas non plus, car la liste doit être clear()ed de ses valeurs d'origine (mais évidemment, si vous l'effacez avant le filtrage , il n'y a plus rien à filtrer...):

persons.stream()
    .filter(p -> p.getAge() > 16)
    .forEach((p) -> persons.add(p));

(Aussi, je préférerais un solution n'impliquant pas l'utilisation d'une bibliothèque ou d'un framework tiers)

Author: Eric Leibenguth, 2015-08-01

1 answers

beerDrinkers.removeIf(p -> p.getAge() <= 16);
 16
Author: JB Nizet, 2015-08-01 09:44:10