gpt4 book ai didi

Java List 到 Map 的转换

转载 作者:搜寻专家 更新时间:2023-10-31 08:13:13 25 4
gpt4 key购买 nike

我想转换一个 Map <String, Integer>来自 List<String>在 Java 8 中是这样的:

Map<String, Integer> namesMap = names.stream().collect(Collectors.toMap(name -> name, 0));

因为我有一个字符串列表,我想创建一个映射,其中键是列表的字符串,值是整数(零)。

我的目标是计算字符串列表的元素(稍后在我的代码中)。

我知道以“旧”方式转换它很容易;

Map<String,Integer> namesMap = new HasMap<>();
for(String str: names) {
map1.put(str, 0);
}

但我想知道是否还有 Java 8 解决方案。

最佳答案

如前所述,Collectors.toMap 的参数必须是函数,因此您必须将 0 更改为 name -> 0(您可以使用任何其他参数名称代替 name)。

但是请注意,如果 names 中存在重复项,这将失败,因为这将导致结果映射中出现重复键。要解决此问题,您可以通过管道传输流 Stream.distinct第一:

Map<String, Integer> namesMap = names.stream().distinct()
.collect(Collectors.toMap(s -> s, s -> 0));

或者根本不初始化这些默认值,并使用 getOrDefaultcomputeIfAbsent相反:

int x = namesMap.getOrDefault(someName, 0);
int y = namesMap.computeIfAbsent(someName, s -> 0);

或者,如果你想得到名字的计数,你可以只使用 Collectors.groupingByCollectors.counting :

Map<String, Long> counts = names.stream().collect(
Collectors.groupingBy(s -> s, Collectors.counting()));

关于Java List<String> 到 Map<String, Integer> 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42486898/

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