Java:DTO集合中的值的总和

vin*_*nit 2 java sum java-8 java-stream

计算MyDTO,Java 8中amountField的总和

private Double getSum(List<MyDTO> myDTOList) {
    return myDTOList.stream().map(MyDTO::getAmount).reduce(0d, Double::sum);
}
Run Code Online (Sandbox Code Playgroud)

Nam*_*man 5

您可以使用Stream.mapToDouble它将其转换为a DoubleStream然后使用DoubleStream.sum:

return myDTOList.stream().mapToDouble(MyDTO::getAmount).sum();
Run Code Online (Sandbox Code Playgroud)

更何况,上述应努力amount成为的integer类型为好,而代码由您共享,这将仍然正常工作,如果量的类型是已double.


或者正如您在评论中指出的那样,如果您的DTO对象可以为null,则可以使用以下方法过滤掉这些值:

return myDTOList.stream().filter(Objects::nonNull).mapToDouble(MyDTO::getAmount).sum();
Run Code Online (Sandbox Code Playgroud)