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

Mat*_*ley 6 java predicate java-8 java-stream

我有一个问题,我相信你帮我解决了皱纹问题.

我有

List<Predicate<TaskFx>> predicates
Run Code Online (Sandbox Code Playgroud)

我想在这里使用这些谓词

taskFxList.stream().filter(predicates).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

作为一个谓词合并如下:

predicate1.and(predicate2).and...
Run Code Online (Sandbox Code Playgroud)

我有一个表(13列),其中包含一些结果(在JavaFx中)和6个字段,可以通过这些字段中的值在此表中搜索.我只能输入3个字段的值,所以我的

predicates.size() = 3;
Run Code Online (Sandbox Code Playgroud)

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

Predicate<TaskFx> predicate
Run Code Online (Sandbox Code Playgroud)

包含由x.and(y).和(z)合并的所有谓词

非常感谢您的帮助!

shm*_*sel 9

你可以reduce像这样流式传输它们:

Predicate<TaskFx> predicate = predicates.stream()
        .reduce(x -> true, Predicate::and);
Run Code Online (Sandbox Code Playgroud)

  • 我更喜欢`.reduce(Predicate :: and).orElse(x - > true);`因为它避免了一个总是`true`谓词与现有谓词的过时组合. (10认同)