Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java8使用fluent API减少对象流列表_Java_Java Stream_Reduce - Fatal编程技术网

Java8使用fluent API减少对象流列表

Java8使用fluent API减少对象流列表,java,java-stream,reduce,Java,Java Stream,Reduce,是否可以通过fluent API方法减少对象列表?例如,我有一个com.mysema.query.types.expr.booleanpression的List,它应该通过com.mysema.query.types.expr.booleanpression#和方法统一起来。我可以通过旧的和可靠的方法来实现,但有点难看: BooleanExpression result = predicates.get(0); for (int i = 1; i < predicates.size();

是否可以通过fluent API方法减少对象列表?例如,我有一个
com.mysema.query.types.expr.booleanpression
List
,它应该通过
com.mysema.query.types.expr.booleanpression#和
方法统一起来。我可以通过旧的和可靠的方法来实现,但有点难看:

BooleanExpression result = predicates.get(0);
for (int i = 1; i < predicates.size(); i++) {
   result = result.and(predicates.get(i));
}
BooleanExpression结果=谓词.get(0);
for(inti=1;i
是否有机会通过Java 8流API重写此操作?

是的,您可以使用以下操作:

BooleanExpression result = predicates.stream().reduce(BooleanExpression::and).orElseThrow(AssertionError::new);
此代码将通过
-ing每个中间结果来减少所有谓词

如果列表为空,则返回一个值。由于当前代码假定至少有一个元素(通过直接调用
.get(0);
),因此在这种情况下,上面的代码段会抛出一个
AssertionError
。当然,您可以使用自己的异常

如果您可以拥有一个标识,即
布尔表达式
始终返回
true
,那么您也可以使用

BooleanExpression result = predicates.stream().reduce(identity, BooleanExpression::and);

即使您有一个标识表达式,也可以使用
.reduce(booleanpression::and).orElse(标识)
甚至不用麻烦将标识与另一个
布尔表达式相结合。