如何组合 List<Predicate<MyClass>> 中的所有谓词

How to combine all predicates from List<Predicate<MyClass>>

我有一个问题,我相信你能帮我解决我的皱纹问题。

我有

List<Predicate<TaskFx>> predicates

我想在

中使用这些谓词
taskFxList.stream().filter(predicates).collect(Collectors.toList());

作为一个谓词合并为:

predicate1.and(predicate2).and...

我有一个 table(13 列),其中包含一些结果(在 JavaFx 中)和 6 个字段,可根据这些字段的值在此 table 中进行搜索。例如,我只能在 3 个字段中输入值,所以我的

predicates.size() = 3;

问题是如何最好地动态准备一个

Predicate<TaskFx> predicate

由x.and(y).and(z)合并的所有谓词组成

非常感谢您的帮助!

您可以像这样直播和 reduce 它们:

Predicate<TaskFx> predicate = predicates.stream()
        .reduce(x -> true, Predicate::and);

或者你可以像这样处理它们:

List<TaskFx> resultSet = stringList.stream()
                                   .filter(e -> predicates.stream().allMatch(x -> x.test(e)))
                                   .collect(Collectors.toList());