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

Java中合并重复车牌ArrayList并累加对应公里数的实现方法

合并重复车牌并累加公里数的实现方案

我有两个ArrayList:一个用于存储车牌(License plates),另一个用于存储公里数(kilometers),二者的索引一一对应。第一个ArrayList中存在多个索引对应同一车牌的情况,我希望生成新的两个ArrayList,每个车牌仅出现一次,并将对应公里数累加。例如:

arraylist1;arraylist2
license 1; 500
license 1; 600
license 1; 300
license 2; 100
license 2; 100

处理后应得到:

arraylist1;arraylist2
license1;1400
license2;200

请问该如何实现?

这个需求处理起来其实挺简单的,核心思路就是利用Map的键唯一性来帮我们做车牌去重,同时完成公里数的累加。下面是具体的实现步骤和代码示例:

实现思路

  1. 用Map存储唯一车牌和累加公里数:Map的键用来存不重复的车牌,值用来存对应车牌的累计公里数。遍历原始的两个ArrayList,每一组对应元素都更新到Map里。
  2. 将Map转换为新的ArrayList:把Map中的所有键提取到新的车牌ArrayList,所有值提取到新的公里数ArrayList,这样两者的索引依然保持一一对应。

代码示例(Java)

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.Map;

public class LicensePlateHandler {
    public static void main(String[] args) {
        // 初始化原始数据
        ArrayList<String> originalPlates = new ArrayList<>();
        ArrayList<Integer> originalKms = new ArrayList<>();
        
        originalPlates.add("license 1");
        originalKms.add(500);
        originalPlates.add("license 1");
        originalKms.add(600);
        originalPlates.add("license 1");
        originalKms.add(300);
        originalPlates.add("license 2");
        originalKms.add(100);
        originalPlates.add("license 2");
        originalKms.add(100);

        // 第一步:去重并累加公里数
        // 用LinkedHashMap可以保持车牌首次出现的顺序,换成HashMap则是无序的
        Map<String, Integer> plateTotalKms = new LinkedHashMap<>();
        for (int i = 0; i < originalPlates.size(); i++) {
            String plate = originalPlates.get(i);
            int currentKm = originalKms.get(i);
            // 累加逻辑:如果车牌已存在,就把当前公里数加到已有值上;否则设为当前值
            plateTotalKms.put(plate, plateTotalKms.getOrDefault(plate, 0) + currentKm);
        }

        // 第二步:生成新的两个ArrayList
        ArrayList<String> uniquePlates = new ArrayList<>(plateTotalKms.keySet());
        ArrayList<Integer> totalKms = new ArrayList<>(plateTotalKms.values());

        // 输出结果验证
        System.out.println("arraylist1;arraylist2");
        for (int i = 0; i < uniquePlates.size(); i++) {
            System.out.println(uniquePlates.get(i) + ";" + totalKms.get(i));
        }
    }
}

额外说明

  • 如果不需要保持车牌的原始出现顺序,把LinkedHashMap换成HashMap即可,性能会更优。
  • 代码中用到的getOrDefault是Java 8及以上版本的方法,如果你的项目用的是更早的Java版本,可以替换成以下逻辑:
    if (plateTotalKms.containsKey(plate)) {
        plateTotalKms.put(plate, plateTotalKms.get(plate) + currentKm);
    } else {
        plateTotalKms.put(plate, currentKm);
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:09:37