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