JDK8之stream流的使用:分组

简介: JDK8之stream流的使用:分组

前言


今天我们来学习JDK8中的stream中的分组函数如何使用,通过stream流对集合数据进行一个分组Map,下面我们就一起来看看吧。

JDK8之stream流的使用:分组


其实分组在日常开发过程中,返回Map类型的情况也是不少的,比如我们要将集合中的值通过年龄的不同分成两组,让我们在下面的示例中学习一下吧。

@Data
@AllArgsConstructor
public class Test {
    private String name;
    private Integer age;
    public static void main(String[] args) {
        List<Test> list = new ArrayList<>();
        list.add(new Test("张三", 1));
        list.add(new Test("张四", 2));
        list.add(new Test("张五", 3));
        list.add(new Test("张六", 4));
        Map<String, List<Test>> collect = list.stream().collect(groupingBy(Test::getName));
        System.out.println(collect);
    }
}

上述代码会得到一个Map集合,执行结果如下:

{张四=[Test(name=张四, age=2)], 张三=[Test(name=张三, age=1)], 张六=[Test(name=张六, age=4)], 张五=[Test(name=张五, age=3)]}

原理即是Collectors.groupingBy方法,返回一个Map集合。

当然,如果我现在想进行多级分组的话,这个时候如何做呢?

还是要接着说groupingBy方法,直接对其进行多重嵌套即可,让我们来看看下面的示例代码吧:

public static void main(String[] args) {
    List<Test> list = new ArrayList<>();
    list.add(new Test("张三", 1));
    list.add(new Test("张四", 2));
    list.add(new Test("张五", 3));
    list.add(new Test("张六", 4));
    Map<String, Map<String, List<Test>>> collect = list.stream().collect(groupingBy(Test::getName,
            groupingBy(test -> {
                if (test.age.equals("1")) {
                    return "update1";
                } else {
                    return "update2";
                }
            })));
    System.out.println(collect);
}

上述代码,执行结果如下:

{张四={update2=[Test(name=张四, age=2)]}, 张三={update2=[Test(name=张三, age=1)]}, 张六={update2=[Test(name=张六, age=4)]}, 张五={update2=[Test(name=张五, age=3)]}}

通过groupingBy返回不同分组的数据,由此就能得到一个嵌套Map的Map集合,挺绕嘴,但是通过获取不同分组的值即可得到想要的值了。


总结


今天我们学习了JDK8中的stream流分组功能,大家是否学会了呢,如果觉得有用,希望关注一下专栏哈。


相关文章
|
6月前
|
API
重学JDK8新特性之Stream(上)
重学JDK8新特性之Stream(上)
42 0
|
3月前
|
API
JDK8的stream有求和方法吗?
【8月更文挑战第20天】JDK8的stream有求和方法吗?
136 3
|
6月前
|
安全 Java 数据库
重学JDK8新特性之Stream(下)
重学JDK8新特性之Stream
60 0
|
6月前
|
Java API
【JAVA进阶篇教学】第三篇:JDK8中Stream API使用
【JAVA进阶篇教学】第三篇:JDK8中Stream API使用
|
6月前
|
Java API 数据处理
JDK 8:Stream API——数据处理的新篇章
JDK 8引入了Stream API,为Java中的数据处理提供了一种全新的方式。本文将详细介绍Stream API的原理、优势以及如何在实际开发中应用这一特性。
|
6月前
|
存储 Java 关系型数据库
JDK8中的新特性(Lambda、函数式接口、方法引用、Stream)(二)
JDK8中的新特性(Lambda、函数式接口、方法引用、Stream)(二)
|
6月前
|
JavaScript 前端开发 Java
JDK8中的新特性(Lambda、函数式接口、方法引用、Stream)(一)
JDK8中的新特性(Lambda、函数式接口、方法引用、Stream)(一)
|
6月前
|
存储 前端开发 Java
Java【代码分享 13】前端动态添加一条记后端使用JDK1.8实现map对象根据key的部分值进行分组(将map对象封装成指定entity对象)
Java【代码分享 13】前端动态添加一条记后端使用JDK1.8实现map对象根据key的部分值进行分组(将map对象封装成指定entity对象)
49 0
|
6月前
JDK8之stream流的使用:归约类方法
JDK8之stream流的使用:归约类方法
43 0
|
2月前
|
Java
安装JDK18没有JRE环境的解决办法
安装JDK18没有JRE环境的解决办法
345 3