簡體   English   中英

Collectors.groupingBy的Java 8類型檢查

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM