gpt4 book ai didi

Collectors.groupingBy 的 Java 8 类型检查

转载 作者:搜寻专家 更新时间:2023-11-01 01:40:53 30 4
gpt4 key购买 nike

为了进行以下代码类型检查,我需要做什么?问题在于 s -> s[0],其中 s 被推断为通用类型 T 而不是 String[ ]

List<String[]> a = Arrays.asList("a.b","c.b")
.stream()
.map(s->s.split("\\."))
.collect(Collectors.toList());
Map<String,List<String>> b = a.stream()
.collect(Collectors.groupingBy(s -> s[0]));

预期的结果应该是这样的 Map:

{a: ["a.b"],
c: ["c.b"]}

最佳答案

The problem is with s -> s[0], where s is inferred to be a generic type T instead of String[].

其实这不是问题。 s被正确推断为 String[] .然而,

a.stream().collect(Collectors.groupingBy(s -> s[0]));

产生 Map<String,List<String[]>> , 不是 Map<String,List<String>> .这就是问题所在。

如果你想加入String String 的小号阵列成一个单一的 String ,您将需要一个额外的映射步骤。

例如:

Map<String,List<String>> b = 
a.stream()
.collect(Collectors.groupingBy(s -> s[0],
Collectors.mapping (s -> String.join (".", s),
Collectors.toList ())));

输出:

{a=[a.b], c=[c.b]}

关于Collectors.groupingBy 的 Java 8 类型检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41459227/

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