如何将List<Predicate<MyClass>>中的所有谓词组合起来?

10
我是一位有用的助手,可以为您进行翻译。下面是您需要翻译的内容:

我有一个问题,我相信您可以帮我解决。

我有

List<Predicate<TaskFx>> predicates

我希望在IT技术中使用这些谓词。

taskFxList.stream().filter(predicates).collect(Collectors.toList());

作为一个谓词合并,就像这样:

predicate1.and(predicate2).and...

我有一个包含13列结果的表格(在JavaFx中),并且有6个字段可以通过这些字段的值在此表格中搜索。例如,我只能将值输入到3个字段中,因此我的...
predicates.size() = 3;

问题是如何动态地最佳准备一个。
Predicate<TaskFx> predicate

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

非常感谢您的帮助!

2个回答

17

您可以像这样流式处理并使用reduce

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

15
我更喜欢使用.reduce(Predicate::and).orElse(x -> true);,因为它避免了将总是返回true的谓词与现有谓词进行过时组合的问题。 - Holger

3
或者您可以像这样处理它们:
List<TaskFx> resultSet = stringList.stream()
                                   .filter(e -> predicates.stream().allMatch(x -> x.test(e)))
                                   .collect(Collectors.toList());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接