java-8 在不创建新列表的情况下过滤列表

2022-09-02 09:30:53

我正在寻找在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
beerDrinkers.removeIf(p -> p.getAge() <= 16);

答案 2