use*_*545 4 java java-8 java-stream
为了进行以下代码类型检查,我需要做什么?问题在于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]));
Run Code Online (Sandbox Code Playgroud)
预期结果应该是Map这样的:
{a: ["a.b"],
c: ["c.b"]}
Run Code Online (Sandbox Code Playgroud)
问题在于s - > s [0],其中s被推断为泛型类型T而不是String [].
实际上那不是问题.s正确推断为String[].然而,
a.stream().collect(Collectors.groupingBy(s -> s[0]));
Run Code Online (Sandbox Code Playgroud)
产生一个Map<String,List<String[]>>,而不是一个Map<String,List<String>>.那就是问题所在.
如果要将数组的Strings 加入String单个数组String,则需要额外的映射步骤.
例如 :
Map<String,List<String>> b =
a.stream()
.collect(Collectors.groupingBy(s -> s[0],
Collectors.mapping (s -> String.join (".", s),
Collectors.toList ())));
Run Code Online (Sandbox Code Playgroud)
输出:
{a=[a.b], c=[c.b]}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
457 次 |
| 最近记录: |