java-8过滤列表而不创建新列表

时间:2015-08-01 09:41:29

标签: java list lambda java-8

我正在寻找最简洁的方法来过滤Java-8中的列表,使用简单的lambda Predicate而不创建新列表

特别是,此解决方案不合适,因为toList()会返回新的List

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

请注意,以下解决方案也不起作用,因为列表应该是clear()其原始值(但很明显,如果您在过滤之前将其清除,则没有任何内容可供使用过滤...):

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

(另外,我更喜欢不涉及使用第三方库或框架的解决方案)

1 个答案:

答案 0 :(得分:23)

beerDrinkers.removeIf(p -> p.getAge() <= 16);