开发避坑指南(46):Java Stream 对List的BigDecimal字段进行求和
需求
对int,long类型的数据求和直接用stream().mapToInt()、stream().mapToDouble(),可是没有stream().mapToBigDecimal()这样的方法,那么如何用stream对List的BigDecimal字段进行求和?
代码实现
直接上代码
public class OrderInfo {private BigDecimal fee;
}public class ListTest2 {public static void main(String[] args) {OrderInfo orderInfo = new OrderInfo();orderInfo.setFee(new BigDecimal(10));OrderInfo orderInfo2 = new OrderInfo();orderInfo2.setFee(new BigDecimal(20));List<OrderInfo> list1 = new ArrayList<>();list1.add(orderInfo);list1.add(orderInfo2);BigDecimal ret = list1.stream().map(e -> e.getFee()).reduce(BigDecimal::add).get();System.out.println(ret.intValue());}
}
输出结果是30。
语法说明
(1).stream()表示返回一个以本集合为数据源的顺序流。
(2).map()表示对流中的每个元素执行映射转换,生成新元素组成的新流。代码中的意思是提取流中每个元素的fee属性,将其映射为BigDecimal类型的流。
(3).reduce() 表示 Java Stream API 中的终止操作,其核心作用是将流中的元素合并为单个结果。代码中的意思是使用BigDecimal的add方法进行归约求和,返回Optional。
(4).get()方法表示从Optional中获取最终计算结果。