java-8过滤列表而不创建新列表
我正在寻找一种最简单的方法来过滤Java-8中的列表,使用简单的lambda Predicate
, 而无需创建新列表 。
特别是,这个解决方案不合适,因为toList()
返回一个新的List
:
List beerDrinkers = persons.stream() .filter(p -> p.getAge() > 16) .collect(Collectors.toList());
请注意,以下解决方案也不起作用,因为列表应该是原始值的clear()
ed(但很明显,如果在过滤之前清除它,则没有任何内容可以过滤…):
persons.stream() .filter(p -> p.getAge() > 16) .forEach((p) -> persons.add(p));
(另外,我更喜欢不涉及使用第三方库或框架的解决方案)
beerDrinkers.removeIf(p -> p.getAge() <= 16);