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);