战友们大家好。
显然, HashMap 中的键是唯一的。但是,我一直在尝试编写一个代码来读取 csv 文件,然后将键和值放入 map 中。然而,有一些键是相同的(每个键在 csv 文件中就像 15 次)。在这种情况下,它应该对这些值求和,并且只返回一次 key 。 怎么做?我现在的代码如下。
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]) );
}
关于java - 如何处理 HashMap 中相同的键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50395346/