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的键唯一性来帮我们做车牌去重,同时完成公里数的累加。下面是具体的实现步骤和代码示例:
实现思路
- 用Map存储唯一车牌和累加公里数:Map的键用来存不重复的车牌,值用来存对应车牌的累计公里数。遍历原始的两个ArrayList,每一组对应元素都更新到Map里。
- 将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
相关产品推荐
相关产品推荐

