是的,使用 Collection#removeIf(谓词)
:
删除此集合中满足给定谓词的所有元素。
请注意,它将更改给定的集合,而不会返回新集合。但是,您可以创建集合的副本并进行修改。另请注意,谓词需要被否定才能充当过滤器:
public static <E> Collection<E> getFilteredCollection(Collection<E> unfiltered,
Predicate<? super E> filter) {
List<E> copyList = new ArrayList<>(unfiltered);
// removeIf takes the negation of filter
copyList.removeIf(e -> { return !filter.test(e);});
return copyList;
}
但是,正如@Holger在注释中建议的那样,如果您选择在代码中定义此实用程序方法,并在需要获取筛选集合的任何地方使用它,则只需将调用委托给该实用程序中的方法即可。然后,您的调用方代码将更加简洁。collect
public static <E> Collection<E> getFilteredCollection(Collection<E> unfiltered,
Predicate<? super E> filter) {
return unfiltered.stream()
.filter(filter)
.collect(Collectors.toList());
}