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

Java实现按车名分组计算List<Car>元素的价格总和

需求说明

现有存储车型名称、价格属性的Car类集合,需要实现sumOfPrice方法,按车名分组统计对应价格的总和,最终输出分组累加结果,预期输出效果如下:

BMW X5 68000
BMW X3 59000
原有代码问题

先修正2个明显的逻辑错误:

  • main方法中用Map<String,Double>存储车辆数据不符合需求:Map的key具有唯一性,同车型多次调用put会覆盖之前的价格,无法保留多条同车型记录参与累加,需要改为List<Car>类型存储车辆实例
  • sumOfPrice是普通实例方法,main是静态方法,直接调用会编译报错,需要将方法改为静态方法,或者通过MainClass实例调用
方法实现逻辑

遍历传入的Car集合,对每台车做如下处理:

  • 提取当前车辆的车型名称、价格
  • 判断结果Map中是否已存在该车型的key:
    • 不存在:直接将当前车型、价格存入结果Map
    • 已存在:取出该车型已统计的总价,加上当前车辆的价格,再更新回结果Map
完整可运行代码
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

// Car实体类
class Car {
    private String name;
    private double price;
    public Car (String name, double price){
        this.name = name;
        this.price = price;
    }
    public String getName() {
        return name;
    }
    public double getPrice(){
        return price;
    }
}

public class MainClass {
    public static void main(String[] args) {
        // 改为List<Car>存储车辆数据,支持同车型多条记录
        List<Car> carList = new ArrayList<>();
        carList.add(new Car("BMW X5", 35000.00));
        carList.add(new Car("BMW X5", 33000.00));
        carList.add(new Car("BMW X3", 30000.00));
        carList.add(new Car("BMW X3", 29000.00));

        Map<String, Double> sumList = sumOfPrice(carList);

        // 打印结果
        for (String model : sumList.keySet()) {
            // 转成整数输出匹配预期格式,不需要小数可直接强转
            System.out.println(model + " " + (int)sumList.get(model).doubleValue());
        }
    }

    // 改为static静态方法,供main方法直接调用
    public static Map<String, Double> sumOfPrice(List<Car> cars) {
        Map<String, Double> sum = new HashMap<>();
        for (Car car : cars) {
            String modelName = car.getName();
            double price = car.getPrice();
            // 核心累加逻辑
            if (sum.containsKey(modelName)) {
                sum.put(modelName, sum.get(modelName) + price);
            } else {
                sum.put(modelName, price);
            }
        }
        return sum;
    }
}
可选简化写法(Java 8+ Stream实现)

如果项目使用JDK8及以上版本,可以直接用Stream的groupingBy收集器简化实现,不需要手动写循环:

// 注意需要先导入 import java.util.stream.Collectors;
public static Map<String, Double> sumOfPrice(List<Car> cars) {
    return cars.stream()
            .collect(Collectors.groupingBy(
                    Car::getName,
                    Collectors.summingDouble(Car::getPrice)
            ));
}

内容的提问来源于stack exchange,提问作者Андрій Х

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:18:14