java - 对Java8中的HashMap感到困惑

标签 java hashmap java-8

我有一个 HashMap ,它采用 String 和 HashSet 作为键和值。 我正在尝试更新 map 并在其中添加值。

我无法理解使用以下哪种方法-

  1. map.putIfAbsent(str.substring(i,j),new HashSet<String>).add(str); //this method gives nullpointerexception

  2. map.computeIfPresent(str.substring(i,j),(k,v)->v).add(str);

在输出中,我可以看到同一个键被添加两次,并带有初始值和更新值。

有人请告诉我如何使用这些方法。

最佳答案

最好的方法是使用 Map#computeIfAbsent 。这样就不会不必要地创建一个新的HashSet,并且之后它会返回该值。

map.computeIfAbsent(str.substring(i, j), k -> new HashSet<>()).add(str);

关于java - 对Java8中的HashMap感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40196669/

相关文章:

java - 大多数 JVM 是否为未使用的方法分配内存?

java - 方法流程+开关

java - HashMap的HashMap->输出问题

java - 用于映射到原始类型的 HashMap 的快速替代方案是什么?

java - hashcode() 仅在类对象的情况下才需要吗?

methods - 如何将 Stream 操作参数添加到我的函数中?

java - 作为字符串一部分的新行字符

java - Eclipse 在资源管理器中显示项目

java - 流<流> : flatMap vs. 减少

java - 使用流有条件地填充 map - Java 8