如何在相同的密钥HashMap Java中加总值?

时间:2017-12-29 15:53:29

标签: java hashmap

我需要将相同键中的值相加而不仅仅是替换?感谢。

    LinkedHashMap<String, LinkedHashMap<String, Integer>> users = new LinkedHashMap<>();
    for (int i = 0; i < n; i++) {
        String[] input = scanner.readLine().split("\\s+");
        String ip = input[0];
        String name = input[1];
        int duration = Integer.parseInt(input[2]);
        if (!users.containsKey(name)) {
            users.put(name, new LinkedHashMap<>());
            users.get(name).put(ip,duration);
        } else {
            users.get(name).put(ip,duration);
        }
    }

5 个答案:

答案 0 :(得分:3)

您可以使用外部地图中的Map.computeIfAbsent以及内部地图中的Map.merge来执行此操作:

Map<String, Map<String, Integer>> users = new LinkedHashMap<>();

for (int i = 0; i < n; i++) {
    String[] input = scanner.readLine().split("\\s+");
    String ip = input[0];
    String name = input[1];
    int duration = Integer.parseInt(input[2]);

    users.computeIfAbsent(name, k -> new LinkedHashMap<>())
        .merge(ip, duration, Integer::sum);
}

答案 1 :(得分:2)

我相信它是你的答案 试试这个:

for (int i = 0; i < n; i++) {
        String[] input = scanner.readLine().split("\\s+");
        String ip = input[0];
        String name = input[1];
        int duration = Integer.parseInt(input[2]);
        if (!users.containsKey(name)) {
            users.put(name, new LinkedHashMap<>());
            users.get(name).put(ip, duration);
        } else {
            LinkedHashMap<String, Integer> user = users.get(name);
            Integer userDuration = user.get(ip);
            user.put(ip, userDuration + duration);
        }
    }

答案 2 :(得分:2)

LinkedHashMap<String, LinkedHashMap<String, Integer>> users = new LinkedHashMap<>();
    for (int i = 0; i < n; i++) {
        String[] input = scanner.readLine().split("\\s+");
        String ip = input[0];
        String name = input[1];
        int duration = Integer.parseInt(input[2]);
        LinkedHashMap<String, Integer> ipDurations= users.get(name);

        if (ipDurations== null) {
            ipDurations= new LinkedHashMap<>();
            ipDurations.put(ip, duration);
            users.put(name, ipDurations);
        } else {
            Integer cummulativeDurration = ipDurations.get(ip);
            if (cummulativeDurration == null) {
               cuumulativeDurration = 0;
               ipDurations.put(ip, cummulativeDuration);
            }
            cummulativeDurration += durration;
          }
     }

答案 3 :(得分:1)

不幸的是我无法添加完整的片段,因为我从手机输入,但我相信所有你需要的是流和收集与合并,如果你以后需要初始地图,或只是合并而不是如果你没有

答案 4 :(得分:0)

int oldDuration = users.get(name).get(ip);
int totalDuration = oldDuration + duration;
users.get(name).put(ip, totalDuration);