Java的stream流

news2024/11/25 19:52:23

Java 8中引入的新特性,stream流通过与Lambda表达式结合,采用函数式编程,简化数组、集合操作,提高效率。

我们操作一个集合,就把他看作一个流,整个流依次执行,(可以类比为一个管道)

开始管道:

中间管道:

 终止管道:

实例:

先创建一个User类:

package One_Thirty;

public class User {
    private int id;
    private String name;
    private String sex;
    private int score;

    public User(){}
    public User(int id, String name, String sex, int score){
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.score = score;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getScore() {
        return score;
    }

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

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", score=" + score +
                '}';
    }
}

测试类:

package One_Thirty;

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

public class Test {

    public static void main(String[] args) {
        List<User> list = new ArrayList<>();
        list.add(new User(1,"榛果","男",100));
        list.add(new User(2,"张三","男",90));
        list.add(new User(3,"大倩","女",80));
        list.add(new User(4,"大力","男",40));
        list.add(new User(5,"刻晴","女",60));
        list.add(new User(6,"松本","男",50));

        //filter()方法用于过滤,collect()方法用于将过滤后得到的流转换为List集合
        List<User> collect = list.stream().filter(user -> user.getScore() > 60)
                .collect(Collectors.toList());
        //遍历
        collect.forEach(System.out::println);

        //也可以将两个合并
        list.stream().filter(user -> user.getScore() > 60).forEach(user -> System.out.println(user));

        //filter的contains方法,包含,.count()获取数量  输出结果 2  //distinct(),去重
        long count = list.stream().filter(user -> user.getName().contains("大")).count();
        System.out.println(count);

        // map函数的作用就是针对管道流中的每一个数据元素进行转换操作
        List<User> collect1 = list.stream().map(user -> {
            user.setId(user.getId() + 10);
            return user;
        }).collect(Collectors.toList());

        collect1.forEach(System.out::println);


        //由于map的参数e就是返回值,所以可以用peek函数。
        // peek函数是一种特殊的map函数,当函数没有返回值或者参数就是返回值的时候可以使用peek函数。
        list.stream().peek(user -> {
            user.setScore(user.getScore()+1);
        }).forEach(user -> System.out.println(user));
        
        

    }


}

flatMap
map可以对管道流中的数据进行转换操作,但是如果管道中还有管道无法处理。例如:将“hello”,“world”两个字符串组成的集合,元素的每一个字母打印出来。如果不用Stream,常规方法写2层for循环,第一层遍历字符串,并且将字符串拆分成char数组,第二层for循环遍历char数组。而如果用map的话,它只能针对一维数组进行操作,数组里面还有数组,管道里面还有管道,它是处理不了每一个元素的。此时用flatMap

List<String> words = Arrays.asList("hello", "word");
        words.stream()
                .flatMap(w -> Arrays.stream(w.split(""))) // [h,e,l,l,o,w,o,r,l,d]
                .forEach(System.out::println);

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

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

相关文章

企业官网怎么做?

企业官网是企业展示形象和吸引潜在客户的重要渠道之一&#xff0c;因此如何打造一款优秀的企业官网显得尤为重要。本文将从策划、设计、开发和上线等方面&#xff0c;为您介绍企业官网的制作步骤。 一、策划 1.明确目标 企业官网的制作需要明确目标&#xff0c;即确定官网的主…

4. SSM 整合

文章目录1. 引言2. 创建工程3. SSM 整合2. 统一结果封装3. 统一异常处理3.1 异常处理器3.2 项目异常处理方案3.2.1 异常分类3.2.2 异常解决方案3.2.3 异常解决方案的具体实现4. 前后台协议联调4.1 列表功能4.2 添加功能4.3 修改功能4.4 删除功能5. 拦截器5.1 拦截器概念1. 引言…

mysql数据库之innodb存储引擎架构之内存架构

一、逻辑存储结构 mysql5.5版本开始&#xff0c;默认使用innodb存储引擎&#xff0c;它擅长事务处理&#xff0c;具有崩溃恢复特性&#xff0c;在日常开发中使用非常广泛。 架构图&#xff08;左侧为内存架构&#xff0c;右侧为磁盘架构&#xff09; 二、 内存架构。 1、缓冲…

SpringBoot使用Redis实现缓存

目录 实现步骤 1. 在 pom.xml 配置文件中添加如下依赖 2. 在 application.properties 中添加如下配置 3. 新建 RedisConfig.class&#xff0c;继承 CachingConfigurerSupport&#xff0c;添加如下方法 4. 新建 RedisService.class 添加如下方法 注意&#xff1a;cacheKey…

看完书上的栈不过瘾,为什么不动手试试呢?

一.栈的基本概念1.栈的定义栈&#xff08;Stack&#xff09;&#xff1a;是只允许在一端进行插入或删除的线性表。首先栈是一种线性表&#xff0c;但限定这种线性表只能在某一端进行插入和删除操作。其中注意几点&#xff1a;栈顶&#xff08;Top&#xff09;&#xff1a;线性表…

2023年新三板产品及服务研究报告

第一章 概述 全国中小企业股份转让系统&#xff08;英语&#xff1a;National Equities Exchange and Quotations&#xff0c;缩写NEEQ&#xff09;&#xff0c;简称股转系统&#xff0c;是第三家全国性证券交易场所&#xff0c;因挂牌企业均为高科技企业而不同于原转让系统内…

软件测试12

一 Linux命令的共通知识点 1.通配符的使用 通配符&#xff1a;又叫文件名替换符号&#xff0c;符号具备特殊含义&#xff0c;例如&#xff1a;文件名&#xff1a;test&#xff0c;通配符可以写成???或者* *&#xff1a;代表可以匹配任意长度的文件名&#xff08;all所有&am…

xxl-job registry fail

解决方法&#xff1a; 1、检查nacos是否正确&#xff0c;一定要注意格式&#xff0c;一般都是addersses的地址问题&#xff0c;一定的要加/不然找不到&#xff0c;本机就不要使用ip了&#xff0c;用localhost。 xxl: job: admin: addresses: http://localhost:8080/xxl-job-ad…

【java】 java开发中 常遇到的各种难点 思路方案

文章目录逻辑删除如何建立唯一索引唯一索引失效问题加密字段模糊查询问题maven依赖冲突问题&#xff08;jar包版本冲突问题&#xff09;sql in条件查询时 将结果按照传入顺序排序作为一个开发人员 总会遇到各种难题 本文列举博主 遇见/想到 的例子 &#xff0c;也希望同学们可以…

【LVGL移植】STM32F1基于STM32CubeMX配置硬件SPI驱动1.8寸TFT ST7735S跑LVGL图形demo

【LVGL移植】STM32F1基于STM32CubeMX配置硬件SPI驱动1.8寸TFT ST7735S屏幕跑LVGL图形demo&#x1f3ac;运行LVGL 按键组件demo ✨基于STM32CubeMX配置工程是因为方便移植&#xff0c;只要是STM32芯片&#xff0c;拿到我的这个工程源码就可以根据自己的stm32芯片&#xff0c;自…

操作系统复试

2017软学 给出操作系统的定义&#xff0c;分别从资源管理&#xff0c;任务调度&#xff0c;用户接口等三个方面论述操作系统的职能 操作系统是位于硬件层之上、所有其他系统软件层之下的一个系统软件&#xff0c;使得管理系统中的各种软件和硬件资源得以充分利用&#xff0c;方…

MATLAB——求连续系统的响应

题目&#xff1a; 已知RC一阶高通电路图的系统函数H(s)为 H(s)UR(S)U(S)RRR1SCsRCsRC1H(s)\frac {UR(S)}{U(S)}R\frac {R}{R\frac {1}{SC}}\frac {sRC}{sRC1}H(s)U(S)UR(S)​RRSC1​R​sRC1sRC​ 其中&#xff1a;R200Ω &#xff0c;C0.47μF 。求其幅度频率响应与相位频率响应…

公网NAT网关与VPC NAT网关介绍与实践

NAT网关介绍 NAT网关是一种网络地址转换服务&#xff0c;提供NAT代理&#xff08;SNAT和DNAT&#xff09;能力。 公有云NAT分为公网NAT网关和VPC NAT网关。 1&#xff09;公网NAT网关&#xff1a;提供公网地址转换服务。 2&#xff09;VPC NAT网关&#xff1a;提供私网地址转换…

商品获价API调用说明:获取商品历史价格信息 代码分享

接口名称&#xff1a;item_history_price公共参数名称类型必须描述keyString是调用key&#xff08;获取测试key&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,item_get,item_search_shop等]cacheString…

Linux磁盘空间占满了

Linux服务器没有安装很多东西&#xff0c;但是硬盘空间爆满了。。。 df -h 查看硬盘空间&#xff0c;发现使用了99%。 刚开始以为是日志文件的占用的&#xff0c;删除了linux日志文件&#xff0c;发现作用不大&#xff0c;只多了几G。 不妨试试下面的命令 lsof L1 发现了有个…

SQL技能 - 窗口函数

SQL技能 - 窗口函数1. 排序函数1.1. 不分组排序1.2. 分组排序2. 聚合函数实现滑动窗口计算2.1. 常用聚合函数2.2. 滑动行范围的常用表达2.3. 示例3. lag、lead函数求增长率&#xff08;同比、环比&#xff09;窗口函数表达式&#xff1a; function(arg) OVER ([PARTITION BY ex…

K8s kubectl 高效使用技巧,搞定批处理!

1.kubectl用法详解 1. kubectl语法 kubectl [command] [Type] [NAME] [flags] command: 子命令&#xff0c;用于操作kubernetes集群资源对象的命令&#xff0c;例如&#xff1a;create, delete, describe, get, apply等等 TYPE: 资源对象的类型&#xff0c;区分大小写&#…

可视化组件届的仙女‖蝴蝶结图、玫瑰环图、小提琴图

在上一篇内容中为大家介绍了几个堪称可视化组件届吴彦祖的高级可视化图表。既然帅哥有了&#xff0c;怎么能少得了美女呢&#xff1f;今天就为大家介绍几个可视化组件届的“美女姐姐”&#xff0c;说一句是组件届的刘亦菲不为过。蝴蝶结图蝴蝶结图因其形似蝴蝶结而得名&#xf…

SDL—安全培训

0x00 前言 软件开发团队的所有成员都必须接受适当的培训&#xff0c;了解安全基础知识以及安全和隐私方面的最新趋势。直接参与软件程序开发的技术角色人员&#xff08;开发人员、测试人员和程序经理&#xff09;每年必须参加至少一门特有的安全培训课程。 这个是微软针对安全培…

蓝牙耳机哪个戴的最舒服?久戴不累的蓝牙耳机推荐

在喧嚣的时代中&#xff0c;快节奏和疲惫充斥着我们的生活&#xff0c;于是耳机成为了人们必不可少的东西&#xff0c;无论是闲暇时亦或是正处在工作时&#xff0c;都会将它戴上&#xff0c;出门在外戴耳机变成了常态&#xff0c;所以小编就整理了一期久戴不累的蓝牙耳机。 No…