Java收集加入自定义函数

Java收集加入自定义函数,java,java-8,java-stream,Java,Java 8,Java Stream,我创建了以下函数: private BooleanExpression createExpresionByJoiningOf(List<BooleanExpression> expresionsForEachStatus) { BooleanExpression inAnyOfSelectedStatus = expresionsForEachStatus.get(0); for (int i = 1; i < expresionsForEach

我创建了以下函数:

private BooleanExpression createExpresionByJoiningOf(List<BooleanExpression> expresionsForEachStatus) {
        BooleanExpression inAnyOfSelectedStatus = expresionsForEachStatus.get(0);
        for (int i = 1; i < expresionsForEachStatus.size(); i++) {
            inAnyOfSelectedStatus = inAnyOfSelectedStatus.or(expresionsForEachStatus.get(i));
        }
        return inAnyOfSelectedStatus;
    }
    List<BooleanExpression> expresionsForEachStatus = originalList.stream()
     .map(statusToBoleanExpresion)
     .collect(Collectors.toList());

谢谢大家!

您可以为
操作声明一个方法,该方法返回
布尔表达式
标识
实现,然后只需执行
reduce
,例如:

return expresionsForEachStatus.stream()
        .reduce(BooleanExpression.identity(), BooleanExpression::or);

除了Naman发布的好的解决方案之外,您还可以使用
anyMatch
跳过完整的缩减,因为(在我看来,
createExpresionByJoiningOf
的逻辑是,如果任何表达式是真的,则返回
true

boolean anyTrue = originalList.stream()
                      .map(statusToBoleanExpresion)
                      .anyMatch(exp -> exp.getValue()); //replace with right getter

这避免了for循环(或
reduce
)在找到
true
值后进行的不必要的迭代

为什么不为此使用
收集器。reduce()
?或者只使用
.reduce(BooleanExpression::or).get()
考虑到原始代码也不支持空列表。@Puce我可能不明白
CreateExpressionByJoiningof
未与方法引用或重复计算的其他表达式一起使用。。。你能详细解释一下吗?嗯,我在JavaFX的上下文中,有一个BooleanExpression绑定类,带有
方法,但我可能错了:
boolean anyTrue = originalList.stream()
                      .map(statusToBoleanExpresion)
                      .anyMatch(exp -> exp.getValue()); //replace with right getter