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)
    ...