【发布时间】:2021-10-22 02:27:15
【问题描述】:
如何将谓词集合应用于 Java 流?
以下代码将说明我的想法:
final Collection<Predicate<MyObject>> filters = getFilters();
final Stream<MyObject> oStream = getMyObjectStream();
oStream
.filterAll(filters) // <- this one doesn't exist
.forEach(System.out::println);
我目前正在使用带有经典循环的函数.filter(m -> applyAllFilters(m, filters)),但想知道是否有更“流式”的方式?
boolean applyAllFilters(final MyObject m, final Collection<Predicate<MyObject>> filters) {
Iterator Predicate<MyObject> iter = filters.iterator();
while(iter.hasNext()) {
Predicate<MyObject> p = iter.next();
if (!p.test(m)) {
return false;
}
}
return true;
}
【问题讨论】:
-
删除
Collection<Predicate>并酌情使用Predicate.and()或Predicate.or()将它们连接在一起。getFilters()应该返回这个Predicate,而不是它们的集合。
标签: java java-8 java-stream