Java8 - 对流(数据)进行自定义分组:groupingBy收集器

版权声明:知识诚无价,分享价更高。 https://blog.csdn.net/u013955940/article/details/83053999

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

猜你喜欢

转载自blog.csdn.net/u013955940/article/details/83053999