filter - Java 8 stream filter on multiple filters
问题描述
I have a list of filters and I want to apply them on a stream of Order:
@Autowired
private List<Filter> filters;
Where Filter is an interface:
public interface Filter {
boolean filter(Order order);}
I found that I can do something like
orders
.stream()
.filter(order -> filter1.filter(order))
.filter(order -> filter2.filter(order))...
But such approach is not correct as my list is dynamic. Can someone help me
解决方案
您首先需要Predicate
从所有过滤器中创建一个。为此,您可以Predicate
通过 AND 运算符将它们简化为最终结果:
Predicate<Order> predicate = filters.stream()
.map(f -> (Predicate<Order>) f::filter)
.reduce(Predicate::and)
.orElse(o -> true);
现在,您可以将此谓词应用于订单流:
orders.stream()
.filter(predicate)
...
推荐阅读
- django - EC2 上的 PostgreSQL 数据库:连接被拒绝
- javascript - 为什么函数中没有定义“q”
- vue.js - 如何配置 polyfill 以使 vuex 与 IE11 一起用于纯 JavaScript 应用程序?
- r - 条形图中 x 轴变量的顺序
- python - Pandas 替换多列的值
- c# - Frame.CameraImage.Texture 在 Arcore 中没有数据
- powershell - 删除超过一年的备份文件,除了当月之外的月底以外的任何时间
- python - 相当于 matplotlib 1 中的 markermft='C0x'?
- eclipse - 使用 delta pack 从 eclipse 64 导出到 32 的问题
- reactjs - react组件内的材质ui样式