为了进行以下代码类型检查,我需要做什么?问题出在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"]}
答案 0 :(得分:8)
问题在于s - &gt; s [0],其中s被推断为泛型类型T而不是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]}