You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java如何使用Stream对枚举关联BigDecimal与列表数值相乘后求和

首先需要先给你的自定义枚举myEnumClass补全yearOfFoundation属性的Getter方法,后续才能从枚举实例中获取到成立年份值,示例补全代码如下:

private enum myEnumClass {
    BMW("Karl Rapp", new BigDecimal("1916")), 
    BENZ("Carl Benz", new BigDecimal("1926"));

    private String founder;
    private BigDecimal yearOfFoundation;

    // 补全枚举构造方法
    myEnumClass(String founder, BigDecimal yearOfFoundation) {
        this.founder = founder;
        this.yearOfFoundation = yearOfFoundation;
    }

    // 补全yearOfFoundation的getter
    public BigDecimal getYearOfFoundation() {
        return yearOfFoundation;
    }
}

你给出的列表初始化代码存在两处笔误,修正后如下:

List<CarDetails> numberOfcars = new ArrayList<>();
numberOfcars.add(new CarDetails(myEnumClass.BMW, new BigDecimal("3")));
numberOfcars.add(new CarDetails(myEnumClass.BENZ, new BigDecimal("5")));

注:CarDetails类的carCompany和amountOfCar属性也需要补全对应的Getter方法,后续逻辑才能正常调用属性值。

接下来就可以用Stream API实现需求逻辑了,核心是通过map将每个CarDetails实例转换为对应乘积,再通过reduce完成BigDecimal类型的累加求和,代码如下:

BigDecimal total = numberOfcars.stream()
        // 单条记录计算:品牌成立年份 * 对应车辆数
        .map(car -> car.getCarCompany().getYearOfFoundation().multiply(car.getAmountOfCar()))
        // 从0开始累加所有乘积得到最终结果
        .reduce(BigDecimal.ZERO, BigDecimal::add);

运行后total的值为15378,和1916*3 + 1926*5的计算结果一致。

内容的提问来源于stack exchange,提问作者Jan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 13:36:03