如何组合List <predicate <myclass>&gt;

时间:2017-11-21 23:05:33

标签: java java-8 java-stream predicate

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

我有

List<Predicate<TaskFx>> predicates

我希望在

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

作为一个谓词合并如:

predicate1.and(predicate2).and...

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

predicates.size() = 3;

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

Predicate<TaskFx> predicate

包含由x.and(y)。和(z)

合并的所有谓词

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:8)

您可以像这样流式传输和reduce

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

答案 1 :(得分:3)

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

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