Java8 stream toMap、groupingBy、mapping的综合应用

文章目录

  • 一、stream toMap、groupingBy、mapping的综合应用
    • 1、前提准备
      • ①、实体类
      • ②、数据准备
    • 2、核心代码:
    • 3、运行结果


一、stream toMap、groupingBy、mapping的综合应用

1、前提准备

①、实体类

package com.cfay.demo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.io.Serializable;

/**
 * @author lcb
 * @since 2023-07-19
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class Student implements Serializable {

    private Integer id;

    private String name;

    private Integer age;
}

②、数据准备

package com.cfay.demo;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

/**
 * @author lcb
 * @since 2023-07-19
 */
public class StudentData {

    private StudentData() {
    }

    public static List<Student> buildStudents() {
        List<Student> students = new ArrayList<>();
        students.add(new Student(1, "小扇", 20));
        students.add(new Student(1, "小雨", 22));
        students.add(new Student(1, "小钰", 19));
        students.add(new Student(1, null, 19));
        students.add(new Student(2, "小蓝", 21));
        students.add(new Student(2, "小天", 20));
        //过滤掉名字为空的数据,并且按照年龄升序排序
        return students.stream().filter(student ->
                Objects.nonNull(student.getName())).sorted(Comparator.comparing(Student::getAge)).collect(Collectors.toList());
    }
}

2、核心代码:

package com.cfay.demo;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @author lcb
 * @since 2023-07-19
 */

public class Test {

    public static void main(String[] args) {
        //将数据按照id进行分组,并把相同id的对象取名称用逗号拼接起来测试
        handleStudentIdNameSplicteMap();
        System.out.println("===================================");
        //将数据按照id进行分组,并把相同id的对象取名称放到集合中去测试
        handleStudentIdNamesMap();
    }

    /**
     * 将数据按照id进行分组,并把相同id的对象取名称用逗号拼接起来
     */
    private static void handleStudentIdNameSplicteMap() {
        //toMap
        System.out.println("toMap ......");
        Map<Integer, String> studentIdNameMap1 = StudentData.buildStudents().stream().collect(Collectors.toMap(Student::getId,
                Student::getName, (pre, act) -> pre + "," + act));
        System.out.println(studentIdNameMap1);

        //groupingBy
        System.out.println("groupingBy ......");
        Map<Integer, String> studentIdNameMap2 = StudentData.buildStudents().stream().collect(Collectors.groupingBy(Student::getId,
                Collectors.mapping(Student::getName, Collectors.joining(","))));
        System.out.println(studentIdNameMap2);
    }

    /**
     * 将数据按照id进行分组,并把相同id的对象取名称放到集合中去
     */
    private static void handleStudentIdNamesMap() {
        //toMap
        System.out.println("toMap ......");
        Map<Integer, List<String>> studentIdNamesMap1 = StudentData.buildStudents().stream().collect(Collectors.toMap(Student::getId, student ->
                new ArrayList<>(Collections.singletonList(student.getName())), (pre, act) -> {
            pre.addAll(act);
            return pre;
        }));
        System.out.println(studentIdNamesMap1);

        //groupingBy
        System.out.println("groupingBy ......");
        Map<Integer, List<String>> studentIdNamesMap2 = StudentData.buildStudents().stream().collect(Collectors.groupingBy(Student::getId,
                Collectors.mapping(Student::getName, Collectors.toList())));
        System.out.println(studentIdNamesMap2);
    }
}

3、运行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/41770.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

中间件上云部署 zookeeper

中间件上云部署 zookeeper 企业级中间件上云部署 zookeeper一、环境说明二、zookeeper部署YAML资源清单准备三、zookeeper部署及部署验证四、zookeeper应用验证 企业级中间件上云部署 zookeeper 一、环境说明 storageclassingress 二、zookeeper部署YAML资源清单准备 # vim…

【Spring】Spring AOP入门及实现原理剖析

文章目录 1 初探Aop1.1 何为AOP&#xff1f;1.2 AOP的组成1.2.1 切面(Aspect)1.2.2 连接点(Join Point)1.2.3 切点(Pointcut)1.2.4 通知(Advice) 1.3 AOP的使用场景 2 Spring AOP入门2.1 添加 Spring AOP 框架⽀持2.2 定义切面和切点2.3 定义相关通知 3 Spring AOP实现原理3.1 …

pyqt 使用pixmap展示图片时候出现失真(图片偏移)

像上图上面的情况&#xff0c; 都是经过放大、旋转等操作&#xff0c;展示图片的时候出现失真的情况 一般都是显卡的问题 需要在qimage转pixmap时&#xff0c;添加部分参数 修改办法&#xff1a; 原本是&#xff1a; pixMap QImage(self.pic_image, width, height, QImage…

iOS APP外包开发的语言比较

iOS APP是Apple公司运行在iPhone手机上的APP&#xff0c;开发这样的APP有两种开发语言可以选择&#xff0c;都是由Apple公司提供的语言。其中Objective-C使用时间相对较长&#xff0c;有历史兼容考虑&#xff0c;而Swift是新的开发语言&#xff0c;更符合近些年开发语言的发展理…

基于单片机水质检测系统的设计与实现

功能介绍 以STM32单片机作为主控系统&#xff1b;液晶显示当前参数&#xff1b;PH模块采集当前水质PH酸碱度&#xff1b;DS18B20温度传感器采集当前水体温度&#xff1b;TDS传感器采集当前水体TDS值&#xff1b;浊度传感器采集当前水体浑浊度&#xff1b;按键设置PH、温度、TDS…

unity02 物体运动

旋转&#xff0c;增量旋转&#xff0c;默认增量为15度 ctrl拖拽物体旋转 设置增量旋转角度大小 edit–>grid and snap settings privot 轴心坐标系&#xff08;中心坐标系&#xff09;默认 local 世界坐标系&#xff08;局部坐标系&#xff09; ctrlD复制物体 物体激活&…

【golang】12、gin 源码解析

文章目录 快速使用返回响应路由匹配pathqueryMultipart/Urlencoded Form 解析请求MultipartFrom MiddleWare github.com/gin-gonic/gin 是 golang 的 web 框架&#xff0c;其用字典树做路由匹配、支持中间件&#xff0c;本文介绍其源码实现。 快速使用 package mainimport (&…

Spring-AOP(面向切面)

Spring-AOP(面向切面) 场景模拟(计算器) 功能接口 public interface Calculator {int add(int i, int j);int minus(int i, int j);int multiply(int i, int j);int div(int i, int j); }实现类 public class CalculateLogImpl implements Calculator {Overridepublic int …

ELK-日志服务【kafka-配置使用】

kafka-01 10.0.0.21 kafka-02 10.0.0.22 kafka-03 10.0.0.23 【1】安装zk集群、配置 [rootes-01 ~]# yum -y install java maven [rootes-01 ~]# tar xf apache-zookeeper-3.5.9-bin.tar.gz -C /opt/[rootes-01 ~]# cd /opt/apache-zookeeper-3.5.9-bin/conf/ [rootes-…

2023年四川大学生程序设计竞赛-A.旷野之息

题目描述 Cuber QQ 终于打败盖农救回了塞尔达公主&#xff0c;海拉鲁大地也开始灾后重建。 在统计学中&#xff0c;幂律表示的是两个量之间的函数关系&#xff0c;其中一个量的相对变化会导致另一个量的相应幂次比例的变化&#xff0c;且与初值无关&#xff1a;表现为一个量是…

【Linux后端服务器开发】UDP协议

目录 一、端口号 二、UDP报头格式 三、UDP的特点 四、UDP协议实现网络聊天群 一、端口号 端口号port标识了一个主机上进行通信的不同的应用程序。 0 ~ 1023&#xff1a;系统端口号&#xff0c;HTTP、FTP、SSH等这些广为使用的应用层协议&#xff0c;它们的端口号都是固定…

TypeScript 1 - 小记

文章目录 关于 TypeScript 关于 TypeScript TypeScript is a superset of JavaScript that compiles to clean JavaScript output. 官网&#xff1a;https://www.typescriptlang.orggithub : https://github.com/microsoft/TypeScriptplayground : https://www.typescriptlan…

AWS MSK集群认证和加密传输的属性与配置

通常&#xff0c;身份认证和加密传输是两项不相关的安全配置&#xff0c;在Kafka/MSK上&#xff0c;身份认证和加密传输是有一些耦合关系的&#xff0c;重点是&#xff1a;对于MSK来说&#xff0c;当启用IAM, SASL/SCRAM以及TLS三种认证方式时&#xff0c;TLS加密传输是必须的&…

RabbitMq(一)

一、基本概念、常见工作模式以及简单使用 MQ全称Message Queue (消息队列)&#xff0c;是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信。 小结 MQ消息队列&#xff0c;存储消息的中间件分布式系统通信两种方式:直接远程调用和借助第三方完成间接通信发…

Layui基本功能(增删改查)

话不多说&#xff0c;根据我前面的博客我们直接进行操作。记住以下的文件放置&#xff0c;防止操作出不来. 这是我们要完成的界面及功能 后台功能实现 数据查看 我们在userDao方法里面进行增删改查的方法我们在userAction进行方法的编写R工具类的介绍 查询 userDao方法 因为我…

51单片机学习--矩阵键盘、电子密码锁

矩阵键盘的模块原理图&#xff1a; 功能&#xff1a;按下矩阵按键&#xff0c;在LCD上显示对应的数值。 采用模块化编程&#xff0c;在此只给出MatrixKey.c 和 main.c 两部分代码 #include <REGX52.H> #include "Delay.h"/*矩阵键盘读取键码按下不放&#xf…

typescript manual

这里写目录标题 throw new Error在浏览器中调试Json定义类型定义数组 functionNamed functionanonymous function Axios经典片段 错误及解决ref valuebecause it is a constantAPI 和 客户端定义的数据结构不一样ServerClient throw new Error throw new Error(“Get data err…

存css实现动态时钟背景

代码实现 <!DOCTYPE html> <html lang"en"> <head><meta http-equiv"Content-Type" content"text/html; charsetUTF-8"><title>Title</title><meta name"referrer" content"no-referrer…

掌握无人机遥感数据预处理的全链条理论与实践流程、典型农林植被性状的估算理论与实践方法、利用MATLAB进行编程实践(脚本与GUI开发)以及期刊论文插图制作等

目录 专题一 认识主被动无人机遥感数据 专题二 预处理无人机遥感数据 专题三 定量估算农林植被关键性状 专题四 期刊论文插图精细制作与Appdesigner应用开发 近地面无人机植被定量遥感与生理参数反演 更多推荐 遥感技术作为一种空间大数据手段&#xff0c;能够从多时、多…

Linux —— 进程状态

目录 一&#xff0c;进程状态分类 二&#xff0c;僵尸进程 三&#xff0c;孤儿进程 一&#xff0c;进程状态分类 进程状态反应进程执行过程中的变化&#xff0c;状态会随外界条件的变化而转换&#xff1b; 三态模型&#xff0c;运行态、就绪态、阻塞态&#xff1b;五态模型…