为了进行以下代码类型检查,我需要做什么?问题在于 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/