java-8过滤列表而不创建新列表 [英] java-8 filter a list without creating a new list

查看:453
本文介绍了java-8过滤列表而不创建新列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm looking for the cleanest way to filter a list in Java-8, with a simple lambda Predicate, without creating a new list.

特别是这个解决方案不合适,因为 toList()会返回一个新的列表

In particular, this solution is not suitable, as toList() returns a new List:

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

请注意,以下解决方案也不起作用,因为列表应为 clear() ed其原始值(但很明显,如果你在过滤之前将其清除,那么就没有什么可以过滤......):

Note that the following solution does not work either, because the list should be clear()ed of its original values (but obviously, if you clear it before filtering, there's nothing left to filter...):

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

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

(Also, I'd prefer a solution not involving the use of a 3rd party library or framework)

推荐答案

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

这篇关于java-8过滤列表而不创建新列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆