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