首页 > 解决方案 > 如何处理 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

标签: javahashmap

解决方案


尝试以下操作:

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]) );
}

推荐阅读