Java 多个过滤器上的 8 个流过滤器
Java 8 stream filter on multiple filters
我有一个过滤器列表,我想将它们应用于订单流:
@Autowired
private List<Filter> filters;
其中 Filter 是一个接口:
public interface Filter {
boolean filter(Order order);}
我发现我可以做类似
的事情
orders
.stream()
.filter(order -> filter1.filter(order))
.filter(order -> filter2.filter(order))...
但是这种方法是不正确的,因为我的列表是动态的。谁能帮帮我
您首先需要从所有过滤器中创建一个 Predicate
。为此,您可以通过 AND 运算符将它们缩减为最终的 Predicate
:
Predicate<Order> predicate = filters.stream()
.map(f -> (Predicate<Order>) f::filter)
.reduce(Predicate::and)
.orElse(o -> true);
现在,您可以将此谓词应用于订单流:
orders.stream()
.filter(predicate)
...
我有一个过滤器列表,我想将它们应用于订单流:
@Autowired
private List<Filter> filters;
其中 Filter 是一个接口:
public interface Filter {
boolean filter(Order order);}
我发现我可以做类似
的事情 orders
.stream()
.filter(order -> filter1.filter(order))
.filter(order -> filter2.filter(order))...
但是这种方法是不正确的,因为我的列表是动态的。谁能帮帮我
您首先需要从所有过滤器中创建一个 Predicate
。为此,您可以通过 AND 运算符将它们缩减为最终的 Predicate
:
Predicate<Order> predicate = filters.stream()
.map(f -> (Predicate<Order>) f::filter)
.reduce(Predicate::and)
.orElse(o -> true);
现在,您可以将此谓词应用于订单流:
orders.stream()
.filter(predicate)
...