jdk 8新版Concurrent Hash Map新增了两个Method。
computeIfAbsent
computeIfPresent
putIfAbsent - 旧方法
我了解 putIfAbsent 和 computeIfAbsent 的用例。 但我不确定何时会使用 computeIfPresent。 如果我现在有 computeIfPresent,为什么还需要 putIfAbsent。 putIfAbsent 会创建至少一个额外的值实例。
仅仅是为了向下兼容吗?
最佳答案
正如另一个答案中提到的:为了向后兼容,将始终保留方法,即使引入了新的、更“强大”的方法也是如此。
关于 computeIfPresent
的用例:可能很难找到一个小到看起来不做作但仍然令人信服的例子。通常,此方法的目的是更新任何形式的现有值。
一个示例可以是(受限的)单词计数:对于一组给定的单词,在 map 中存储初始计数 0
。然后,处理一系列单词:每当从初始集合中找到一个单词时,它的计数就会增加 1:
import java.util.LinkedHashMap;
import java.util.Map;
public class ComputeIfPresentExample
{
public static void main(String[] args)
{
Map<String, Integer> wordCounts = new LinkedHashMap<String, Integer>();
String s =
"Lorem ipsum dolor sit amet consetetur iam nonumy sadipscing " +
"elitr, sed diam nonumy eirmod tempor invidunt ut erat sed " +
"labore et dolore magna dolor sit amet aliquyam erat sed diam";
wordCounts.put("sed", 0);
wordCounts.put("erat", 0);
for (String t : s.split(" "))
{
wordCounts.computeIfPresent(t, (k,v) -> v+1);
}
System.out.println(wordCounts);
}
}
(当然,像这样的事情可以用不同的方式解决,但这是一个相当频繁的任务,以一种或另一种形式,新方法允许一个相当简洁和优雅的解决方案)
关于java - ConcurrentHashMap JDK 8 何时使用 computeIfPresent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24872531/