Java8流式操作——中间操作

news2025/1/11 11:12:59

文章目录

  • 什么是中间操作?
  • 方法
  • 实践说明
    • 一、前提条件
      • Person类
      • Data类
    • 二、操作
      • filter:过滤
      • distinct:去重(去除集合中重复的元素)
      • sorted:排序
        • ①、sorted():无参构造
        • ②、sorted(Compartor compartor):有参构造
      • skip:跳过。从前往后数,跳过前xxx个元素,保留剩下的元素
      • limit:限制,只取流中前指定位的元素。从前往后数,只取前xxx个元素
      • map:元素映射,用指定的元素来替换流中的元素

什么是中间操作?

对数据进行过滤、排序……操作


方法

● filter:过滤
● distinct:去重(去除集合中重复的元素)
● sorted:排序
● skip:跳过。从前往后数,跳过前xxx个元素,保留剩下的元素
● limit:限制,只取流中前指定位的元素。从前往后数,只取前xxx个元素
● map:用指定的元素来替换流中的元素


实践说明

一、前提条件

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;
    }
}

二、操作

filter:过滤

//获取数据源
Stream<Person> stream = Data.getData().stream();

//成绩大于等于90的人员
stream.filter(ele -> ele.getScore() >= 90).forEach(System.out::println);

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


distinct:去重(去除集合中重复的元素)

去重规则:1、判断hashCode()     
                 2、如果hashCode相同,再判断equals()
//获取数据源
Stream stream = Data.getData().stream();

//去重并循环输出结果
stream.distinct().forEach(System.out::println);

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


sorted:排序

①、sorted():无参构造

规则:实现Comparable接口,重写compareTo方法定义要排序的规则
在这里插入图片描述

 public static void main(String[] args) {
     //将成绩从低到高排序
	Data.getData().stream().sorted().forEach(System.out::println);
 }

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

②、sorted(Compartor compartor):有参构造

规则:直接在表达式中自定义排序规则

 public static void main(String[] args) {
     //将年龄从低到高排序
	Data.getData().stream().sorted().forEach(System.out::println);
 }

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



skip:跳过。从前往后数,跳过前xxx个元素,保留剩下的元素

limit:限制,只取流中前指定位的元素。从前往后数,只取前xxx个元素

 public static void main(String[] args) {
    //limit:只取前2个元素
    Data.getData().stream().limit(2).forEach(System.out::println);
    
    System.out.println("------------------------------------------------");
            
    //skip:跳过前4个元素,保留剩下的元素
    Data.getData().stream().skip(4).forEach(System.out::println);
 }

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

我们也可以将skip和limit结合使用:
需求:获取从第2个到第5个元素

 public static void main(String[] args) {
    //获取数据源        
    Stream<Person> stream = Data.getData().stream();
    
		//思路:2-5一共4个人
    stream.skip(1).limit(4).forEach(System.out::println);
}

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


map:元素映射,用指定的元素来替换流中的元素

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

 public static void main(String[] args) {
    //获取数据源        
    Stream<Person> stream = Data.getData().stream();

    //获取元素
    stream.map(ele -> ele.getScore() >= 80 ? ele : ele.getName()).forEach(System.out::println);
}

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




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

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

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

相关文章

【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代码模拟分块与合并上传视频…

BFD场景作用及缺省配置

一、BFD缺省配置 表&#xff1a;BFD参数缺省值 二、BFD场景作用 表&#xff1a;BFD场景作用 三、BFD配置缺省参数汇总 1&#xff09;配置BFD单跳检测 图&#xff1a;BFD单跳检测配置流程图 执行命令bfd&#xff0c;使能全局BFD功能并进入BFD视图。缺省情况下&#xff0c;全…

30天、2000公里、400亿,“长沙国际工程机械展”竖起世界展会新地标

文|智能相对论 作者|佘凯文 2021年4月的一天&#xff0c;一台重达120吨的日立建机超大型液压挖掘机在日本的某港口装载完成&#xff0c;或许绝大多人对120吨没有概念&#xff0c;给大家解释下&#xff0c;一吨等于2000斤&#xff0c;120吨就是240000斤。金箍棒知道吧&#xf…

RocketMQ学习1

1、RocketMQ快速入门 RocketMQ是阿里巴巴2016年MQ中间件&#xff0c;使用Java语言开发&#xff0c;在阿里内部&#xff0c;RocketMQ承接了例如“双11”等高并发场景的消息流转&#xff0c;能够处理万亿级别的消息。 1.1 准备工作 1.1.1 下载RocketMQ RocketMQ最新版本&#xff…

【垃圾回收器】基于Go实现引用计数法(ReferenceCount)

不想传火的&#xff0c;可以点击下面的链接&#xff01; github:GCByGO 给我点赞嘛&#xff0c;球球了&#xff01; What This? 现象 引用计数法是一种垃圾回收算法&#xff0c;用于跟踪对象被引用的次数。在该算法中&#xff0c;每个对象都会维护一个计数器&#xff0c…

PyTorch:深度学习框架的优雅演进与设计理念

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

【Linux】文件与路径

一、Linux相关软件 xftp&#xff1a;用来传文件 xshell&#xff1a;用来敲命令 二、Linux的文件结构 windows系统下设有盘符&#xff1a;如C盘、D盘等&#xff0c;Linux没有盘符的概念&#xff0c;只有一个根目录/&#xff0c;所有文件都在它下面。 在根目录下输入命令ls&am…

PHP 入门学习笔记

现在如果问什么行业最火&#xff0c;很多人第一反应肯定就是IT。的确&#xff0c;这些年随着互联网的不断发展&#xff0c;IT热门众所周知。那么就一起来说说&#xff0c;IT行业里&#xff0c;哪些技术更热门。 一、PHP技术&#xff1a; PHP 是一种创建动态交互性站点的强有力…

2. C 语言基础

2. C 语言基础 常考面试题 int main(int argc, char ** argv)函数中&#xff0c;参数argc和argv分别代表什么意思&#xff1f;⭐⭐⭐⭐ 第一个参数&#xff0c;int型的argc&#xff0c;为整型&#xff0c;用来统计程序运行时发送给main函数的命令行参数的个数。 第二个参数&am…

深度遍历模版与广度遍历模版

深度优先遍历 //void dfs(中间容器&#xff0c;数据) //{ // if(临界走到末尾) // { // 中间容器加到最终容器 // return&#xff1b; // } // for(做选择) // { // 改变中间容器 // dfs(中间容器&#xff0c;数据) // 撤回…

Linux下编译MySQL++/mysqlpp

一、简介 MySQL&#xff08;又名mysqlpp&#xff09;是对MySQL和MariaDB C api的c封装。它建立在与标准c库相同的规范之上&#xff0c;使得处理数据库与处理std容器一样简单。MySQL还提供了一些功能&#xff0c;使用户可以在自己的代码中避免最重复的SQL排序&#xff0c;为这些…

springboot 整合rabbitMq保证消息一致性方案

rabbitMq介绍 RabbitMQ是一种开源的消息代理软件&#xff0c;它实现了高级消息队列协议&#xff08;AMQP&#xff09;标准&#xff0c;可用于在应用程序之间传递消息。RabbitMQ最初由LShift开发&#xff0c;现在由Pivotal Software维护。 RabbitMQ可以在多个平台上运行&#x…

计算机网络笔记:TCP协议 和UDP协议(传输层)

TCP 和 UDP都是传输层协议&#xff0c;他们都属于TCP/IP协议族。 TCP 基本概念 TCP的全称是传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP 是面向连接的、可靠的流协议&#xff08;流就是指不间断的数据结构&#xff09; TCP报文格式 TCP报文是…