开发避坑指南(46):Java Stream 对List的BigDecimal字段进行求和

需求

对int,long类型的数据求和直接用stream().mapToInt()、stream().mapToDouble(),可是没有stream().mapToBigDecimal()这样的方法,那么如何用stream对List的BigDecimal字段进行求和?

代码实现

直接上代码

java 复制代码
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中获取最终计算结果。

相关推荐
程序员小白条12 分钟前
0经验如何找实习?
java·开发语言·数据结构·数据库·链表
小马爱打代码23 分钟前
Spring AI:搭建自定义 MCP Server:获取 QQ 信息
java·人工智能·spring
郭涤生26 分钟前
QT 架构笔记
java·数据库·系统架构
daidaidaiyu29 分钟前
基于LangGraph开发复杂智能体学习一则
java·ai
小小8程序员1 小时前
STL 库(C++ Standard Template Library)全面介绍
java·开发语言·c++
a努力。1 小时前
Redis Java 开发系列#2 数据结构
java·数据结构·redis
a努力。2 小时前
腾讯Java面试被问:String、StringBuffer、StringBuilder区别
java·开发语言·后端·面试·职场和发展·架构
Vic101013 小时前
解决 Spring Security 在异步线程中用户信息丢失的问题
java·前端·spring
QD_IT伟4 小时前
SpringBoot项目整合Tlog 数据链路的规范加强
java·spring boot·后端
源码获取_wx:Fegn08954 小时前
基于springboot + vue二手交易管理系统
java·vue.js·spring boot·后端·spring·课程设计