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)
您可以使用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)