Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.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
使用Java 8新API的CollectionUtills时发生编译错误_Java_Lambda_Java 8 - Fatal编程技术网

使用Java 8新API的CollectionUtills时发生编译错误

使用Java 8新API的CollectionUtills时发生编译错误,java,lambda,java-8,Java,Lambda,Java 8,我想用一些包含数量的对象迭代一个数组,并获取totalQuantity,但是使用Java8的新API而不是每个循环的tipical 到目前为止,我就是这样做的: int totalQuantityOrdered=0; totalQuantityOrdered=CollectionUtils.isNotEmpty(details)?details.stream().forEach(detail->totalQuantityOrdered+=detail.getOrderHeader(

我想用一些包含数量的对象迭代一个数组,并获取totalQuantity,但是使用Java8的新API而不是每个循环的tipical

到目前为止,我就是这样做的:

int totalQuantityOrdered=0;
    totalQuantityOrdered=CollectionUtils.isNotEmpty(details)?details.stream().forEach(detail->totalQuantityOrdered+=detail.getOrderHeader().getQuantity()):totalQuantityOrdered;
然而,我得到一个编译错误,告诉我为了使用lambda表达式,变量totalQuantityOrdered必须是final。然后我想,当一个变量是final时,意味着它的值不能修改,那么在这种情况下,我该如何实现我想要做的呢


提前为您安排时间。

有一种更干净的方法:

int totalQuantityOrdered = 
    details.stream()
           .mapToInt(detail -> detail.getOrderHeader().getQuantity())
           .sum();

这是假设getOrderHeader.getQuantity返回一个int。

有一种更简洁的方法:

int totalQuantityOrdered = 
    details.stream()
           .mapToInt(detail -> detail.getOrderHeader().getQuantity())
           .sum();

这是假设getOrderHeader.getQuantity返回一个int.

Related:这是因为在Lambda表达式中,我们不能将任何值赋给在其外部声明的局部变量。因此,lambda中使用的任何变量都被视为final.Related:这是因为在lambda表达式中,我们不能将任何值赋给在其外部声明的局部变量。因此,lambda中使用的任何变量都被视为final。