gpt4 book ai didi

java - 如何在 Java 中使用合并方法增加 HashMap 值?

转载 作者:行者123 更新时间:2023-12-05 04:29:19 25 4
gpt4 key购买 nike

我有以下列表并使用LinkedHashMap .

我想将增加1 (如果键在 map 中不存在,它从 0 开始,我添加 +1 ):

int nums[] = new int[]{4, 10, 5, 4, 2, 10};

Map<Integer, Integer> map = new LinkedHashMap<>();

for (int i = 0; i < nums.length; i++) {
int key = nums[i];
int value = map.getOrDefault(key, 0) + 1;

// I want to use merge method, but have no idea
// what should be the 3 rd parameter denoted by "<??????>"
int value = map.merge(key, 1, <??????>)

map.put(key, value);
}

但是,我想使用 merge()方法,但不知道“<??????>”表示的第三个参数应该是什么(请参阅代码)。

那么,在这种情况下如何使用合并方法呢?

最佳答案

merge的第三个参数方法是一个 BiFunction,即接受两个泛型 V 参数(您的值的类型)并返回所述值的合并的功能接口(interface)。

假设您在您的代码中尝试获取每个键的频率,尽管您写的是“它从 0 开始,我加 +1”,但这里是您尝试的示例。

合并操作由您决定,在您的情况下,它仅包括保留第一个值(已经存在于您的 map 中的值),将其递增一个并忽略第二个值。合并也可以简单地包括对第一个和第二个值求和,因为对于每个键,您只是映射值 1。

int nums[] = new int[]{4, 10, 5, 4, 2, 10};

Map<Integer, Integer> map = new LinkedHashMap<>();
for (int i = 0; i < nums.length; i++) {
map.merge(nums[i], 1, (v1, v2) -> v1 + 1);

//Alternatively summing the two values
//map.merge(nums[i], 1, (v1, v2) -> v1 + v2);
}

System.out.println(map);

但是,如果您的目标是获取键冲突的次数而不是键冲突的频率,那么只需将值 1 替换为 0,上面的代码仍然有效。

int nums[] = new int[]{4, 10, 5, 4, 2, 10};

Map<Integer, Integer> map = new LinkedHashMap<>();
for (int i = 0; i < nums.length; i++) {
map.merge(nums[i], 0, (v1, v2) -> v1 + 1);
}

System.out.println(map);

关于java - 如何在 Java 中使用合并方法增加 HashMap 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72361400/

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