java - 如何处理 HashMaps 中的相同键?
问题描述
战友们好。
显然,哈希图中的键是唯一的。但是,我一直在尝试编写一个代码来读取 csv 文件,然后将键和值放入映射中。但是,有相同的键(每个键在 csv 文件中都有 15 次)。在这种情况下,它应该对这些值求和,然后只返回一次键。怎么做?我现在的代码如下。
BufferedReader br = null;
String line;
try {
br = new BufferedReader(new FileReader(filepath));
} catch (FileNotFoundException fnfex) {
System.out.println(fnfex.getMessage() + "Bestand niet gevonden!");
System.exit(0);
}
//this is where we read lines
try {
while((line = br.readLine()) != null) {
String[] splitter = line.split(cvsSplitBy);
if(splitter[0] != "Voertuig") {
alldataMap.put(splitter[0], splitter[8]);
}
//MIGHT BE JUNK, DONT KNOW YET
/*if((splitter[0].toLowerCase()).contains("1")){
double valuekm = Double.parseDouble(splitter[8]);
license1 += valuekm;
System.out.println(license1);
}
else {
System.out.println("not found");
}*/
}
System.out.println(alldataMap);
TextOutput();
} catch (IOException ioex) {
System.out.println(ioex.getMessage() + " Error 1");
} finally {
System.exit(0);
}
因此,如果我有以下信息(在这种情况下,它的第 0 和第 8 个单词读取 csv 文件中的每一行)
Apples; 299,9
Bananas; 300,23
Apples; 3912,1
Bananas;342
Bananas;343
它应该返回
Apples;Total
Bananas;Total
解决方案
尝试以下操作:
if( alldataMap.containsKey(splitter[0]) ) {
Double sum = alldataMap.remove(splitter[0]) + Double.parseDouble(splitter[8]);
allDataMap.put(splitter[0], sum );
} else {
alldataMap.put(splitter[0], Double.valueOf(splitter[8]) );
}
推荐阅读
- node.js - TypeError:无法读取未定义的属性(读取“命令”)
- events - 如何在 DDD 中通过订单进行交货
- python - 在我的情况下,迭代 Pandas 行的最佳方法是什么?
- c - 具有不同节点的 C (Linux) 中的叉树
- swift - Swift 包无法解析
- c - 在 c 编程中用多个字符打破 while 循环
- python - 获取 href 值 BeautifulSoup
- rest - 在 Google Assistant 之外使用 Actions REST API?
- html - D3.JS - 创建链接到 csv 文件的 HTML 表
- php - 如何在 Woocommerce 的“本地取货”中添加超过美元金额的免费送货功能