Java流式操作之Collectors工具类操作指南
作者:吃豆子的恐龙 发布时间:2022-12-01 01:25:55
标签:流式,collectors,工具类
方法
● 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());
输出结果:
来源:https://blog.csdn.net/weixin_43319713/article/details/130462745


猜你喜欢
- 如果使用IDEA创建Springboot项目,默认会在resource目录下创建application.properties文件,在spri
- 本文实例讲述了Android实现EditText控件禁止输入内容的方法。分享给大家供大家参考,具体如下:问题:android如何实现Edit
- 图的实际应用在现实生活中,有许多应用场景会包含很多点以及点点之间的连接,而这些应用场景我们都可以用即将要学习的图这种数据结构去解决。地图:我
- 看如下代码#include "pch.h"#include <iostream>using namespac
- 一、绘制背景绘制背景的方法有两种:自己利用canvas进行绘制利用view的自带方法进行绘制1.1 canvas绘制背景自己绘制的背景的方法
- 实现常驻通知栏时遇到的问题:无论如何就是不显示通知,查看日志发现貌似报错了:2020-06-28 14:11:34.923 6387-638
- Android 自定义组件成JAR包的实现方法,这里对自己实现的Android View 组件进行JAR 包的处理。
- public class MainActivity extends Activity { TextView tv; Ch
- 最近有一个项目要用到年份周期,用于数据统计图表展示使用,当中用到年份周期,以及年份周期所在的日期范围。当初设想通过已知数据来换算年份周期,经
- Android 的导航栏有诸多功能,例入 截屏,音量加,音量减,最近任务,菜单.返回,主页面,输入法开关......代码源路径:
- 本文实例为大家分享了Java实现人机猜拳游戏的具体代码,供大家参考,具体内容如下实现:User类public class User { pr
- 首先要安装SpeechSDK5.1 开发包和SpeechSDK5.1 Langague Pack(中英文) 语言包,不过VS2010里是自带
- Java生成4位、6位随机数短信验证码生成短信验证码问题,本质是产生某个范围内随机数的问题。比如,要生成6位短信验证码xxxxxx:6位数最
- 这篇文章主要介绍了java 读取系统Properties代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 基本概念Spring Validation 验证框架对参数的验证机制提供了@Validated(Spring's JSR-303规范
- 本文实例为大家分享了C# picturebox实现图像拖拽和缩放的具体代码,供大家参考,具体内容如下1.核心步骤:①新建Point类型全局变
- 下图是《Unity Shader 入门精要》一书中的渲染流程图;ApplicationStage阶段:准备场景信息(视景体,摄像机参数)、粗
- 一、简介此游戏是《2D 赛车》的”魔改版“——2.5D 双人
- 1、将 Jmeter 下 extras 目录中 ant-jmeter-1.1.1.jar 包拷贝至 ant 安装目录下的lib目录中,否则会
- 本文实例为大家分享了Java实现图形化界面日历的具体代码,供大家参考,具体内容如下此程序主要功能实现了可以根据用户选择的年月日来定位日期,日