【发布时间】:2015-10-23 23:22:35
【问题描述】:
我正在寻找在 Java-8 中过滤列表的最简洁方法,使用简单的 lambda Predicate,无需创建新列表。
这个解决方案尤其不适合,因为toList() 返回一个新的List:
List<Person> 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));
(另外,我更喜欢不涉及使用第三方库或框架的解决方案)
【问题讨论】:
-
不错的变量名。 :P
-
查看github.com/wapatesh/fig,很多情况下你可能需要它