Java8 - 对流(数据)进行自定义分组:groupingBy收集器
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
本文首发于个人独立博客,文章链接:http://www.zebe.me/java-8-stream-grouping-by