使用Java 8新API的CollectionUtills时发生编译错误
我想用一些包含数量的对象迭代一个数组,并获取totalQuantity,但是使用Java8的新API而不是每个循环的tipical 到目前为止,我就是这样做的:使用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(
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。