java-8 - 给定带有 getOrDefault 的键,更新 hashmap 值

标签 java-8 hashmap

我有一个 HashMap :

HashMap<string, Integer> hmap = new HashMap<>();

我想增加 HashMap 值的地方。为了避免nullPointer Exception如果 key 不存在,我会检查它!假设数据是:
//201803271 - 1000
//201803271 - 1000
//201803272 - 1000

//inside a loop i read the data...
  if (hmap.get("201803271") != null) {
      hmap.put("201803271", hmap.get("201803271") + 1000);
  }else{
      hmap.put("201803271", 1000);
  }
//end of loop

正如我得到的那样有效:
201803271 - 2000
201803272 - 1000

但是,我读了这个问题 How to update a value, given a key in a java hashmap?并且有使用 Java 8 方法的解决方案 getOrDefault .我尝试过这个
hmap.put("201803271", count.getOrDefault("201803271", 1000) + 1000)

但是,使用此解决方案我会得到错误的结果...
201803271 - 3000
201803272 - 2000

我错过了什么?

最佳答案

Java 8 介绍 merge 方法 Map仅针对此类问题的界面:

hmap.merge("201803271", 1000, Integer::sum);

这意味着“为这个键输入 1000,但如果这个键已经有一个值,则向它添加 1000”。

您的解决方案不起作用的原因是您默认获得 1000,然后向其添加 1000。使用 getOrDefault 正确执行此操作,您可能希望将 getOrDefault 中的 1000 替换为 0 . hmap.put("201803271", count.getOrDefault("201803271", 0) + 1000))

关于java-8 - 给定带有 getOrDefault 的键,更新 hashmap 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50187955/

相关文章:

java - 流式传输 map 列表并收集特定 key

Java 8 : map. 合并时间复杂度

Java 8 Steam Group By两个属性并获得第三个属性的平均值

java - 什么是对象 k?

java - NetBeans 更改 HashMap 中键的顺序

java - 使用 gson 解析带有变体键值的 json 到 hashmap

java - 请帮助我了解 java1.8 与安全功能的向后兼容性

java-8 - 根据 ZoneId 调整 LocalTime

java - 从 map 中提取时消除类型转换

java - 如何将带有自定义对象的 HashMap 添加到 ArrayList