![](/img/trans.png)
[英]Modifying the returned Map value type with collectors.groupingBy in Java stream
[英]Java 8 type check for Collectors.groupingBy
為了進行以下代碼類型檢查,我需要做什么? 問題在於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"]}
問題在於s - > 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]}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.