Java流式操作——Collectors工具类

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

方法


● 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());


输出结果:


d3bb90dfbc194da5b2469bb54619f88a.png


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

相关文章
|
1月前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
105 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
1月前
|
Java
Java 些许公共工具类
Java 些许公共工具类
15 1
|
3月前
|
缓存 前端开发 Java
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
【8月更文挑战第10天】java基础巩固,工具类的封装
27 1
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
|
3月前
|
Java
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
|
4月前
|
存储 Java 索引
Java ArrayList操作指南:如何移除并返回第一个元素
通过上述方法,你可以方便地从Java的 `ArrayList` 中移除并返回第一个元素。这种操作在日常编程中非常常见,是处理列表时的基本技能之一。希望这篇指南能帮助你更好地理解和运用Java的 `ArrayList`。
49 4
|
3月前
|
存储 设计模式 安全
Java GenericObjectPool 对象池化技术--SpringBoot sftp 连接池工具类
Java GenericObjectPool 对象池化技术--SpringBoot sftp 连接池工具类
52 0
|
4月前
|
分布式计算 DataWorks Java
DataWorks操作报错合集之使用ODPS Tunnel Upload功能时,遇到报错:Java 堆内存不足,该如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
4月前
|
并行计算 Java 数据挖掘
Java面试题:解释Java中的Stream API及其操作
Java面试题:解释Java中的Stream API及其操作
57 0
|
4月前
|
设计模式 缓存 安全
Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
41 0
|
4月前
|
设计模式 存储 缓存
Java面试题:结合建造者模式与内存优化,设计一个可扩展的高性能对象创建框架?利用多线程工具类与并发框架,实现一个高并发的分布式任务调度系统?设计一个高性能的实时事件通知系统
Java面试题:结合建造者模式与内存优化,设计一个可扩展的高性能对象创建框架?利用多线程工具类与并发框架,实现一个高并发的分布式任务调度系统?设计一个高性能的实时事件通知系统
55 0