开发避坑指南(49):Java Stream 对List中的字符串字段求和
需求
总有一些同志把数值型的字段定义成字符串型给你挖坑,那么java中如何用stream对list中的字符串类型的字段求和?
代码实现
直接上代码
int total = orderList.stream().filter(e -> StringUtils.isNotEmpty(e.getCount())).map(e -> new Integer(e.getCount())).reduce(Integer::sum).orElse(0);
语法说明
(1)stream()表示返回一个以本集合为数据源的顺序流。
(2)filte()表示对流中的每个元素进行非空过滤。
(3)map()表示对流中的每个元素执行映射转换,生成新元素组成的新流。代码中的意思是提取流中每个元素
的fee属性,将其转换为Integer类型的流。
(4)reduce()表示JavaStreamAPI中的终止操作,其核心作用是将流中的元素合并为单个结果。代码中的意思是
使用Integer的sum方法进行归约求和,返回Optional。
(5)orElse()方法表示当流为空时,reduce返回的Optional对象为空,此时orElse(0)会返回默认值0。