Java流式操作——Collectors工具类

news2025/2/27 11:15:19

文章目录

  • 方法
  • 实践说明
    • 一、前提条件
      • Person类
      • Data类
    • 二、操作
      • maxBy:获取流中最大元素;minBy:获取流中最小元素
      • joining:合并,将流中的元素,以字符串的形式拼接起来
      • summingInt:把流中的元素映射成int类型的元素,求和
      • averagingInt:把流中的元素映射成int类型的元素,求平均值
      • summarizingInt:把流中的元素映射成int类型的元素,获取描述信息

方法

● maxBy:获取流中最大元素;minBy:获取流中最小元素
● joining:合并,将流中的元素,以字符串的形式拼接起来
● summingInt:把流中的元素映射成int类型的元素,求和
● averagingInt:把流中的元素映射成int类型的元素,求平均值
● summarizingInt:把流中的元素映射成int类型的元素,获取描述信息


实践说明

一、前提条件

Person类

package com.example;

import lombok.AllArgsConstructor;
import lombok.Data;
import org.springframework.context.annotation.Configuration;

import java.util.Objects;

/**
 * @BelongsProject: StreamOperate
 * @BelongsPackage: com.example
 * @CreateTime: 2023-05-01  11:18
 * @Description: Person实体类
 * @Version: 1.0
 */
public class Person implements Comparable<Person>{
    public String getName() {
        return name;
    }

    public Person setName(String name) {
        this.name = name;
        return this;
    }

    public int getAge() {
        return age;
    }

    public Person setAge(int age) {
        this.age = age;
        return this;
    }

    public int getScore() {
        return score;
    }

    public Person setScore(int score) {
        this.score = score;
        return this;
    }

    private String name;
    private int age;
    private int score;


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

    public Person() {

    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", score=" + score +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        //地址相同,为true
        if (this == o) return true;
        //为null,并且类型不一样,为false
        if (o == null || getClass() != o.getClass()) return false;
        //向下转型,再去比较属性值
        Person person = (Person) o;
        //如果属性值相同,最后的结果为true
        return age == person.age && score == person.score && Objects.equals(name, person.name);


        //return false;
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age, score);
    }


    @Override
    public int compareTo(Person o) {
        return this.getScore()-o.getScore();
    }
}

Data类

package com.example;

import org.springframework.context.annotation.Configuration;

import java.util.ArrayList;

/**
 * @BelongsProject: StreamOperate
 * @BelongsPackage: com.example
 * @CreateTime: 2023-05-01  11:08
 * @Description: Data类
 * @Version: 1.0
 */
public class Data {
    public static ArrayList<Person> getData() {
        ArrayList<Person> personList = new ArrayList<>();

        personList.add(new Person("张三", 18, 90));
        personList.add(new Person("李四", 19, 100));
        personList.add(new Person("王五", 17, 60));
        personList.add(new Person("赵六", 18, 89));
        personList.add(new Person("孙七", 20, 96));
        personList.add(new Person("郑十", 20, 46));
        personList.add(new Person("周八", 20, 96));
        personList.add(new Person("周八", 20, 96));
        personList.add(new Person("吴九", 20, 45));
        personList.add(new Person("邓十一", 20, 35));
        personList.add(new Person("刘十二", 20, 99));
        personList.add(new Person("小十三", 20, 56));
        personList.add(new Person("小十三", 20, 56));

        return personList;
    }
}

二、操作

maxBy:获取流中最大元素;minBy:获取流中最小元素

public static void main(String[] args) {
        Stream<Person> stream = Data.getData().stream();

        //maxBy:获取流中最大元素;minBy:获取流中最小元素
        System.out.println(Data.getData().stream().collect(Collectors.maxBy((ele1, ele2) -> ele1.getScore() - ele2.getScore())));
        System.out.println(Data.getData().stream().collect(Collectors.minBy((ele1, ele2) -> ele1.getAge() - ele2.getAge())));
}

joining:合并,将流中的元素,以字符串的形式拼接起来

public static void main(String[] args) {
        Stream<Person> stream = Data.getData().stream();

        //joining:合并,将流中的元素,以字符串的形式拼接起来
        //将集合中person对象的姓名拼接成一个字符串
        System.out.println(Data.getData().stream().map(Person::getName).collect(Collectors.joining()));
        System.out.println(Data.getData().stream().map(Person::getName).collect(Collectors.joining("-")));
        System.out.println(Data.getData().stream().map(Person::getName).collect(Collectors.joining("-", "{", "}")));
}


summingInt:把流中的元素映射成int类型的元素,求和

public static void main(String[] args) {
        Stream<Person> stream = Data.getData().stream();
				
				//summingInt:把流中的元素映射成int类型的元素,求和
        System.out.println(Data.getData().stream().collect(Collectors.summingInt(Person::getScore)));
}


averagingInt:把流中的元素映射成int类型的元素,求平均值

public static void main(String[] args) {
        Stream<Person> stream = Data.getData().stream();

        //averagingInt:把流中的元素映射成int类型的元素,求平均值
        System.out.println(Data.getData().stream().collect(Collectors.averagingInt(Person::getScore)));
}


summarizingInt:把流中的元素映射成int类型的元素,获取描述信息

需求:将流中分数大于等于80的Person对象替换成他们的姓名

 public static void main(String[] args) {
        Stream<Person> stream = Data.getData().stream();
      
        //summarizingInt:把流中的元素映射成int类型的元素,获取描述信息
        IntSummaryStatistics collect = Data.getData().stream().collect(Collectors.summarizingInt(Person::getScore));
        System.out.println(collect);
        System.out.println(collect.getCount());
        System.out.println(collect.getSum());
        System.out.println(collect.getMax());
        System.out.println(collect.getMax());
        System.out.println(collect.getAverage());

输出结果:
在这里插入图片描述



如果有想要交流的内容欢迎在评论区进行留言,如果这篇文档受到了您的喜欢那就留下你点赞+收藏+评论脚印支持一下博主~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot第14集:MyBatis-CRUD讲解

注意点&#xff1a;增、删、改操作需要提交事务&#xff01; 为了规范操作&#xff0c;在SQL的配置文件中&#xff0c;我们尽量将Parameter参数和resultType都写上&#xff01; 编写Mapper接口类 import com.da.pojo.User; import java.util.List; public interface UserMapper…

4.1 指令系统的发展与性能要求

学习目标&#xff1a; 指令系统的发展与性能要求的学习目标&#xff1a; 理解指令系统的发展历程&#xff0c;包括CISC、RISC、VLIW等架构的特点、优缺点以及应用领域&#xff1b;掌握指令系统的性能要求&#xff0c;包括指令集的多样性、可编程性、并行性、效率、可靠性等&a…

ChatGPT学习-如何向ChatGPT提问

​ 最近在学习chatGPT,怎么样的提问是一个好的提问。通过网上找资料肯定不是最好的方法&#xff0c;我想起一句话&#xff0c;“不识庐山真面目&#xff0c;只缘身在此山中”。最好的老师就是chatGPT&#xff01; 下面先展示下提问成果&#xff0c;我通过xmind生成了思维导图 一…

为什么越来越多的企业选择云计算

目录 一、前言 二、云计算的基础概念 2.1 云计算的定义 2.2 云计算的发展历程 2.3 云计算的基本架构 三、 企业采用云计算的优势 四、 行业应用案例 五、未来发展与挑战 六、总结 随着数字化转型的加速&#xff0c;越来越多的企业开始选择云计算作为信息技术应用的基础…

Linux 用户管理与文件权限

Linux 是一个多用户系统&#xff0c;它允许多个用户同时登陆主机&#xff0c;并为他们分配不同的资源和工作环境进行使用。当然&#xff0c;不同的用户都有文件的私有需求&#xff0c;所以设置不同用户文件的权限管理十分重要。 01 用户与用户组 Linux 中一般将文件访问权限的…

【matplotlib】可视化解决方案——如何正确设置图例

概述 matplotlib 中的图例&#xff08;Legend&#xff09;可以帮助我们展示每个数据对应的名称&#xff0c;让图像阅读者更好的认识到图像的数据结构以及绘图者想表达的意思。matplotlib 可以为每一个可见绘图对象&#xff08;Artist&#xff09;添加图例&#xff0c;官方建议…

windows10系统如何实现telnet内网穿透

在windows10系统环境中&#xff0c;我们常用的内网穿透方案是远程桌面内网穿透技术方案&#xff0c;存在的弊端是它属于视窗类操作工具。网上很多教人开启windows10的telnet服务的帖子&#xff0c;凡是通过系统设置进入启用或关闭windows应用后勾选telnet客户端这种方式&#x…

ChatGPT实现服务器体验沙箱

服务器体验沙箱 IT 人员在学习一门新技术时&#xff0c;第一个入门门槛通常都是"如何在本地安装并成功运行"。因此&#xff0c;很多技术的官网都会通过沙箱技术&#xff0c;提供在线试用的 playground 或者按步模拟的 tour。让爱好者先在线尝试效果是否满足预期&…

如何评估现代处理器的性能——以ARM Cortex-A53为例

如何评估现代处理器的性能——以ARM Cortex-A53为例 1 有哪些通用评价指标&#xff1f; 现代处理器内核的性能可以从以下几个方面进行评估&#xff1a; 时钟速度&#xff08;Clock Speed&#xff09;&#xff1a;它是CPU内部时钟发生器的频率&#xff0c;以赫兹&#xff08;…

IDEA2022版教程下()

8.快捷键的使用 8.1 常用快捷键 见《 尚硅谷_宋红康_IntelliJ IDEA 常用快捷键一览表.md 》 8.2 查看快捷键 1、已知快捷键操作名&#xff0c;未知快捷键 2、已知快捷键&#xff0c;不知道对应的操作名 8.3 自定义快捷键 8.4 使用其它平台快捷键 苹果电脑或者是用惯Eclips…

改进YOLOv5: | 涨点神器 | 即插即用| ICLR 2022!Intel提出ODConv:即插即用的动态卷积

OMNI-DIMENSIONAL DYNAMIC CONVOLUTION ODConv实验核心代码ODConv代码yaml文件运行:论文链接: https://openreview.net/forum?id=DmpCfq6Mg39 本文介绍了一篇动态卷积的工作:ODConv,其通过并行策略采用多维注意力机制沿核空间的四个维度学习互补性注意力。作为一种“即插…

Java8流式操作——中间操作

文章目录 什么是中间操作&#xff1f;方法实践说明一、前提条件Person类Data类 二、操作filter:过滤distinct:去重&#xff08;去除集合中重复的元素&#xff09;sorted:排序①、sorted():无参构造②、sorted(Compartor compartor)&#xff1a;有参构造 skip:跳过。从前往后数&…

【Python入门篇】Python开发环境的搭建——安装和配置PyCharm工具

作者简介&#xff1a; 辭七七&#xff0c;目前大一&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; Python入门&#xff0c;本专栏主要内容为Python的基础语法&#xff0c;Python中的选择循环语句…

闲谈【Stable-Diffusion WEBUI】的插件:绘图过程动画输出

文章目录 &#xff08;零&#xff09;前言&#xff08;一&#xff09;过程动画输出&#xff08;Steps Animation&#xff09;&#xff08;1.1&#xff09;使用&#xff08;1.2&#xff09;成果 &#xff08;零&#xff09;前言 本篇主要提到WEBUI的过程动画输出插件&#xff0c…

Docker 持久化存储 Volumes

Docker 持久化存储 Volumes 简介如何选择 -v 和 --mount-v或--volume--mount 创建和管理卷启动带有卷的容器使用Docker Compose的卷使用卷启动服务使用只读卷备份、恢复或迁移数据卷备份卷 删除卷自动删除匿名卷删除所有未使用卷 简介 官方文档: https://docs.docker.com/stor…

Python JS逆向篇(四)

Python JS逆向篇&#xff08;四&#xff09; 找到参数加密位置跟进window.asrsea函数结果扣取的js代码扩展 逆向主题&#xff1a;某易云评论数据&#xff0c;请求时的加密参数。 &#xff08;注&#xff1a;文章所涉及内容只做学习参考交流&#xff0c;不做除此之外的任何其它用…

正则表达式基础一

BRE(basic regular expression)&#xff1a;匹配数据流中的文本字符 普通文本匹配 特殊字符 正则表达式存在一些特殊字符&#xff0c;如需当成普通文本来匹配&#xff0c;必须加上转义&#xff0c;即反斜杠\&#xff0c;如下所示 .*[]^${}?|() 指定出现位置的字符 ^ 指定行首…

Python两三行代码轻松批量添加~防韩还是很有必要的~

人生苦短&#xff0c;我用python 一直想做一个这种系列的但是因为七七八八的事情总是忘记&#xff0c; 今天正好有空&#xff0c;来开整一下~ 首先&#xff0c; 天冷防韩是什么梗&#xff1f; 【天冷防韩】 “天冷防韩”是“天冷防寒”的谐音&#xff0c; 不过“寒”指的…

编程工具集-我的JavaScript/TypeScript/NodeJS实用工具模块

JavaScript/TypeScript编程工具集 JavaScript/TypeScript/NodeJS实用工具模块 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263?spm1001.2101.3001.5343 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https…

【微服务 | 学成在线】项目易错重难点分析(媒资管理模块篇·上)

文章目录 模块整体认识架构问题分析nacos配置管理搭建nacos公用配置配置优先级网关搭建 分布式文件系统什么是分布式文件系统MinIO数据恢复测试SDK 上传图片http请求头中的content-typeRequestPart接口分析Service层的优化 上传视频断点续传技术java代码模拟分块与合并上传视频…