首页 > 编程语言 >java stream流 实现集合数据的多次分组

java stream流 实现集合数据的多次分组

时间:2023-08-18 23:00:59浏览次数:24  
标签:java String stream Person groupingBy 分组 public name

在Java中,使用Stream流进行多次分组可以通过多次调用Collectors.groupingBy方法实现。每次调用groupingBy方法都会将元素按照指定的分类条件进行分组。

import java.util.*;
import java.util.stream.Collectors;

public class StreamGroupingExample {
    public static void main(String[] args) {
        List<Person> persons = Arrays.asList(
                new Person("Alice", 25, "Female"),
                new Person("Bob", 30, "Male"),
                new Person("Charlie", 35, "Male"),
                new Person("Diana", 28, "Female"),
                new Person("Eva", 25, "Female"),
                new Person("Frank", 30, "Male")
        );

        // 第一次分组:按性别分组
        Map<String, List<Person>> genderGroups = persons.stream()
                .collect(Collectors.groupingBy(Person::getGender));

        System.out.println("按性别分组结果:");
        System.out.println(genderGroups);

        // 第二次分组:在每个性别组内按年龄分组
        Map<String, Map<Integer, List<Person>>> ageGroups = persons.stream()
                .collect(Collectors.groupingBy(Person::getGender,
                        Collectors.groupingBy(Person::getAge)));

        System.out.println("按性别和年龄分组结果:");
        System.out.println(ageGroups);
    }

    static class Person {
        private String name;
        private int age;
        private String gender;

        public Person(String name, int age, String gender) {
            this.name = name;
            this.age = age;
            this.gender = gender;
        }

        public String getName() {
            return name;
        }

        public int getAge() {
            return age;
        }

        public String getGender() {
            return gender;
        }

        @Override
        public String toString() {
            return name;
        }
    }
}

输出结果:

按性别分组结果:
{Female=[Alice, Diana, Eva], Male=[Bob, Charlie, Frank]}
按性别和年龄分组结果:
{Female={25=[Alice, Eva], 28=[Diana]}, Male={30=[Bob, Frank], 35=[Charlie]}}

首先按照性别对Person对象进行分组。然后,在每个性别组内再按照年龄对Person对象进行分组。通过多次使用Collectors.groupingBy方法,我们实现了多次分组。


标签:java,String,stream,Person,groupingBy,分组,public,name
From: https://blog.51cto.com/u_16176998/7142500

相关文章

  • python调用java的jar包,在scrapy中处理加密逻辑
    APP采集过程中有些请求是需要加密处理的,之前的方式是通过frida-inject的方式处理的,但是这需要连接手机,好在本次处理的APP加密逻辑不是很复杂,加密逻辑都在java层,于是便将里面的java层的加密逻辑单独摘出来,想单独的做成一个jar包,这样就不用再用python做一个相同的算法还原了经过半......
  • JavaScript中的析构对象,析构数组与展开运算符
    前言这些是JavaScript中重要的编程思想,这些析构对象,析构函数与展开运算符很重要这块内容不怎么难,纯属一些语法,但是在所谓的函数式编程,以及React中却是广泛使用的逆向思维,之前是怎么构造,而现在让你如何展开,获取里面的内容!!逆向思维,之前是怎么构造,而现在让你如何展开,获取里面的内......
  • 如何用java将本地redis 中所有类型数据同步到阿里云redis中
    在分布式系统中,数据同步是一个重要的任务,特别是在将数据从一个Redis实例同步到另一个Redis实例的情况下。本篇博客将介绍如何使用Java编程语言以及Jedis(JavaRedis客户端)库来实现将本地Redis中的所有类型数据同步到阿里云Redis实例中。核心代码importredis.client......
  • JavaScript中常见的数据结构和算法及其应用场景简介
    在JavaScript编程中,数据结构和算法是必不可少的组成部分。本文将介绍JavaScript中常见的数据结构和算法以及它们的应用场景。数据结构数组数组是JavaScript中最常见的数据结构之一。它是一种有序的集合,可以存储任意类型的数据。由于数组支持快速随机访问,因此它非常适合用于存......
  • 给定n个多种颜色的球,如何将球分组,保证每组内球颜色不能相同,且分组的数量要最小。
    usingSystem;usingSystem.Collections.Generic;publicclassBallColorGroup{publicintColor{get;set;}publicintCount{get;set;}}publicclassBallColorGrouping{publicstaticList<List<int>>GroupBalls(List<int&g......
  • json与java对象转换
    导入包fasjsonjava对象转json//1.查询所有这张表所有的数据,调用Service层的selectAll()List<Brand>bs=brandService.selectAll();System.out.println(bs); //2.将java集合转成JSON数据StringjsonString=JSON.toJSONString(bs);  json转java对象 //1.获取......
  • java实现大文件上传控件
    ​ javaweb上传文件上传文件的jsp中的部分上传文件同样可以使用form表单向后端发请求,也可以使用ajax向后端发请求    1. 通过form表单向后端发送请求         <formid="postForm" action="${pageContext.request.contextPath}/UploadServlet" method="pos......
  • PostgreSQL与Java类型的对照
    PostgreSQL™                JavaSE8date                    LocalDatetime                   LocalTimetimestamp withouttimezone      LocalDateTimetimestampwithtimezon......
  • java.sql.SQLException: Access denied for user 'root'@'localhost' (using password
    场景:使用mybatis-plus和SpringBoot,用Druid连接,查询数据库时出现异常用户访问被拒绝java.sql.SQLException:Accessdeniedforuser'root'@'localhost'(usingpassword:YES)在application.yml中核对过用户名密码后发现连接数据库密码是正确的,问题出在哪儿呢?appliation.yml......
  • java实现大文件上传组件
    ​ 文件上传下载,与传统的方式不同,这里能够上传和下载10G以上的文件。而且支持断点续传。通常情况下,我们在网站上面下载的时候都是单个文件下载,但是在实际的业务场景中,我们经常会遇到客户需要批量下载的场景,还有文件夹的下载场景。与传统业务需求相比,新的业务需求要求更高,难度也......