gpt4 book ai didi

java - ConcurrentHashMap JDK 8 何时使用 computeIfPresent

转载 作者:太空狗 更新时间:2023-10-29 22:32:07 24 4
gpt4 key购买 nike

jdk 8新版Concurrent Hash Map新增了两个Method。

computeIfAbsent

computeIfPresent

putIfAbsent - 旧方法

我了解 putIfAbsentcomputeIfAbsent 的用例。但我不确定何时会使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com