我假设您
Filter的类型不同于
java.util.function.Predicate,这意味着需要对其进行调整。一种可行的方法如下:
things.stream().filter(t -> filtersCollection.stream().anyMatch(f -> f.test(t)));
这会为每个谓词评估重新创建过滤器流带来轻微的性能损失。为避免这种情况,您可以将每个过滤器包装到中
Predicate并组成它们:
things.stream().filter(filtersCollection.stream().<Predicate>map(f -> f::test) .reduce(Predicate::or).orElse(t->false));
但是,由于现在每个过滤器都落后于自己
Predicate,引入了更高级别的间接访问,因此尚不清楚哪种方法具有更好的整体性能。
没有适应性的关注(如果您
Filter碰巧是
Predicate),问题陈述将变得更加简单,第二种方法显然会胜出:
things.stream().filter( filtersCollection.stream().reduce(Predicate::or).orElse(t->true));



