【问题标题】:Java 8 stream filter on multiple filters多个过滤器上的 Java 8 流过滤器
【发布时间】:2018-09-20 01:47:52
【问题描述】:

我有一个过滤器列表,我想将它们应用于订单流:

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

但是这种方法是不正确的,因为我的列表是动态的。谁能帮帮我

【问题讨论】:

    标签: filter java-8 java-stream autowired


    【解决方案1】:

    您首先需要从所有过滤器中创建一个Predicate。为此,您可以通过 AND 运算符将它们简化为最终的 Predicate

    Predicate<Order> predicate = filters.stream()
        .map(f -> (Predicate<Order>) f::filter)
        .reduce(Predicate::and)
        .orElse(o -> true);
    

    现在,您可以将此谓词应用于订单流:

    orders.stream()
        .filter(predicate)
        ...
    

    【讨论】:

      猜你喜欢
      • 2018-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多