對流(資料)進行自定義分組:groupingBy收集器
阿新 • • 發佈:2019-01-30
groupingBy收集器
在JDK8中,可以對流進行方便的自定義分組,就像 SQL
語句中的 groupBy
一樣,在JDK8中對應的分組函式是 Collectors
類的 groupingBy
方法。這種特性很有用:把資料拆分成不同的組,可以使處理資料更加靈活方便,在某些情況下例如按需處理、分塊處理時更高效。
例如:有一組人名,需要根據首字母(姓氏)進行分組,則可以通過 groupingBy
分組函式方便地實現。
下面是程式碼例子:
// 建立一個包含人名稱的流
Stream<String> stream = Stream.of("Alen", "Hebe", "Zebe", "Helen" , "Alex");
// 通過人名稱的首字母進行分組
final Map<Character, List<String>> map = stream.collect(Collectors.groupingBy(s -> s.charAt(0)));
// 輸出分組結果
map.forEach((letter, groups) -> {
System.out.println("以字母 " + letter + " 開頭的名字如下:");
groups.forEach(name -> System.out.println("\t" + name)) ;
});
程式輸出結果如下:
以字母 A 開頭的名字如下:
Alen
Alex
以字母 H 開頭的名字如下:
Hebe
Helen
以字母 Z 開頭的名字如下:
Zebe