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流分组功能,大家是否学会了呢,如果觉得有用,希望关注一下专栏哈。


相关文章
|
3月前
|
Java API 数据处理
JDK 8:Stream API——数据处理的新篇章
JDK 8引入了Stream API,为Java中的数据处理提供了一种全新的方式。本文将详细介绍Stream API的原理、优势以及如何在实际开发中应用这一特性。
|
9月前
|
存储 SQL Java
JDK新特性之Stream流
JDK新特性之Stream流
|
5月前
|
存储 前端开发 Java
Java【代码分享 13】前端动态添加一条记后端使用JDK1.8实现map对象根据key的部分值进行分组(将map对象封装成指定entity对象)
Java【代码分享 13】前端动态添加一条记后端使用JDK1.8实现map对象根据key的部分值进行分组(将map对象封装成指定entity对象)
26 0
|
6月前
|
存储 SQL Java
【JDK新特性】必会_Stream API
【JDK新特性】必会_Stream API
|
7月前
|
Java
异步编程 - 07 基于JDK中的Future实现异步编程(下)_当Stream遇见CompletableFuture
异步编程 - 07 基于JDK中的Future实现异步编程(下)_当Stream遇见CompletableFuture
36 0
|
存储 JavaScript Dubbo
JDK 8 Stream 数据流效率怎么样?
JDK 8 Stream 数据流效率怎么样?
JDK 8 Stream 数据流效率怎么样?
|
SQL 安全 Java
JDK1.8新特性(六):Stream的终极操作,轻松解决集合分组、汇总等复杂操作
本文将讲述关于Stream的终极操作,让你轻松解决集合的分组、汇总等操作,让其他同事对你刮目相看。
625 0
|
存储 搜索推荐 Java
JDK 8 Stream 数据流效率怎么样?
Stream 是Java SE 8类库中新增的关键抽象,它被定义于 java.util.stream (这个包里有若干流类型:Stream&lt;T&gt; 代表对象引用流,此外还有一系列特化流,如 IntStream,LongStream,DoubleStream等。
JDK 8 Stream 数据流效率怎么样?
|
Java
JDK 1.8 使用Stream实现List操作小结
实际项目中经常需要对得到的集合元素进行操作.Stream 是 jdk1.8 中处理集合的流概念,它可以指定你希望对集合进行的操作,通过内部迭代实现非常复杂的查找、过滤和映射数据等操作
511 0
|
1天前
|
Java Shell 开发者
都2024年了!你还不知道在Docker中安装jdk?
都2024年了!你还不知道在Docker中安装jdk?