Stream流的简单使用

stream流的三类方法

  1. 获取Stream流
    ○ 创建一条流水线,并把数据放到流水线上准备进行操作
  2. 中间方法
    ○ 流水线上的操作
    ○ 一次操作完毕之后,还可以继续进行其他操作
  3. 终结方法
    ○ 一个Stream流只能有一个终结方法
    ○ 是流水线上的最后一个操作

在这里插入图片描述

其实Stream流非常简单,只需要将其理解为一条流水线即可,然后在不同的时期去做不同的操作。

获取流-如何生成流

生成Stream流的方式:

  1. Collection体系集合
    使用默认方法stream()生成流, default Stream stream()
  2. Map体系集合
    把Map转成Set集合,间接的生成流 entrySet().stream() 或者 keySet().stream()
  3. 数组
    通过Arrays中的静态方法stream生成流 Arrays.stream(T Values)
  4. 同种数据类型的多个数据
    通过Stream接口的静态方法of(T... values)生成流

stream流的中间操作方法

中间操作的意思是,执行完此方法之后,Stream流依然可以继续执行其他操作(“每次中间操作完成后返回的仍然是stream流”

方法名说明
Stream filter(Predicate predicate)用于对流中的数据进行过滤
Stream limit(long maxSize)返回此流中的元素组成的流,截取前指定参数个数的数据
Stream skip(long n)跳过指定参数个数的数据,返回由该流的剩余元素组成的流
static Stream concat(Stream a, Stream b)合并a和b两个流为一个流
Stream distinct()返回由该流的不同元素(根据Object.equals(Object) )组成的流

stream流的终结方法

终结操作的意思是,执行完此方法之后,Stream流将不能再执行其他操作(“即方法操作后返回的对象不再是一个stream对象”

方法名说明
void forEach(Consumer action)对此流的每个元素执行操作
ong count()返回此流中的元素数

stream流的收集方法

  • 概念
    对数据使用Stream流的方式操作完毕后,可以把流中的数据收集到集合中
  • 常用方法
方法名	说明
R collect(Collector collector)	把结果收集到集合中  
  • 工具类Collectors提供了具体的收集方式
方法名说明
public static Collector toList()把元素收集到List集合中
public static Collector toSet()把元素收集到Set集合中
public static Collector toMap(Function keyMapper,Function valueMapper)把元素收集到Map集合中

一些使用Stream流的例子

  1. 找出数组中的偶数并遍历输出
	List<Integer> list = new ArrayList<Integer>();
	list.add(1);
	list.add(2);
	list.add(3);
	list.add(4);
	list.add(5);
	list.add(6);
	list.add(7);
	list.add(8);
	list.add(9);
	list.add(10);
	list.stream().filter(s->0 == s%2).forEach(s-> System.out.println(s));

在这里插入图片描述

  1. 根据字符串数组中的元素按照逗号,的位置将数据提取出来,并且要求年龄>24,然后将结果进行输出
List<String> list = new ArrayList<>();
        list.add("zhangsan,23");
        list.add("lisi,24");
        list.add("wangwu,25");
        Map<String, Integer> collect = list.stream()
                .filter(s -> 24 <= Integer.parseInt(s.split(",")[1]))
                .collect(Collectors.toMap(s -> s.split(",")[0], s -> Integer.parseInt(s.split(",")[1])));
        System.out.println(collect);

在这里插入图片描述

  1. 将字符串数组中数组元素的信息按照,分离出来,并且进行过滤,然后封装到对应的实体类actor

实体类(name , age):

package com.robin.mystream;

public class Actor {

    private String name;
    private Integer age;

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Actor(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public Actor() {
    }

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

package com.robin.mystream;

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

public class StreamDemo3 {
    public static void main(String[] args) {
        List<String> list1 = new ArrayList<>();
        list1.add("张三,23");
        list1.add("李四,24");
        list1.add("王麻子,25");
        list1.add("二狗子,27");
        list1.add("狗剩,22");
        list1.add("德柱子,21");

        List<String> list2 = new ArrayList<>();
        list2.add("张晓丽,28");
        list2.add("翠芬,27");
        list2.add("杨如花,23");
        list2.add("杨似玉,26");
        list2.add("马兰花,32");
        list2.add("杨大嘴,22");

        // 将姓名为3个字的人的信息过滤出来,并且只输出两个
        Stream<String> stream1 = list1.stream()
                .filter(s -> s.split(",")[0].length() == 3)
                .limit(2);

        // 将姓杨的人过滤出来,并且不要第一个姓杨的
        Stream<String> stream2 = list2.stream()
                .filter(s -> s.split(",")[0].startsWith("杨"))
                .skip(1);
		
		// 将两次结果合并起来
        Stream<String> streamConcat = Stream.concat(stream1, stream2);

        streamConcat.forEach(act->{
            Actor actor = new Actor(act.split(",")[0], Integer.parseInt(act.split(",")[1]));
            System.out.println(actor);
        });

    }
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

毕设之-消息系统设计(websocket+netty)

文章目录 前言技术选型基本架构 前言 long time no see。 前几天去一家小公司待了待&#xff0c;果断还是选择跑路&#xff0c;第三天就去另一家公司考察环境&#xff0c;和主管聊了两个多小时&#xff0c;非常愉快&#xff0c;就是单位薪资砍了一半。哎&#xff0c;旧事莫提了…

如何给linux内核的config增加新驱动选项?

Kconfig 在Kconfig中添加config选项&#xff0c;可以参考其他同级配置&#xff0c;CAN_F81601最终选中后&#xff0c;会传给Makefile为CONFIG_CAN_F81601&#xff0c;而tristate后面的则是在menuconfig中的文本提示&#xff0c;只要只管可以理解均可 config CAN_F81601trista…

摄影企业网站搭建的作用是什么

几乎每个成年人都有一部手机&#xff0c;在互联网信息时代&#xff0c;手机的作用不言而喻&#xff0c;拍照/摄像成为了不少人经常会做的事&#xff0c;拍一张美美的照片发到社交圈赢得赞声&#xff0c;或是为以后留下回忆或发给自己在意的人&#xff0c;但这只限于生活记叙类图…

玩转大数据21:基于FP-Growth算法的关联规则挖掘及实现

1.引言 关联规则挖掘是大数据领域中重要的数据分析任务之一&#xff0c;其可以帮助我们发现数据集中项目之间的关联关系。关联规则挖掘是指在交易数据或者其他数据集中&#xff0c;发现一些常见的关联项&#xff0c;如购物篮中经常一起出现的商品组合。关联规则挖掘的应用非常…

【FPGA 器件比较】Altera -- Xilinx

比较以下市场前二名的产品线及定位 应用场景XilinxAltera高性能VersalAgilex F/I性能Virtex / Kintex / Artix / Zynq UltraScaleAgilex F/I / Stratix 10中档Virtex / Kintex / Zynq ~ 7 / UltraScaleStratix 10 / Arria 10低成本Artix-7 Sparton-7Cyclone 10 如上表&#x…

【C++】STL 容器 - stack 堆栈容器 ① ( stack 堆栈容器特点 | stack 堆栈容器与 deque 双端数组容器对比 | 简单示例 )

文章目录 一、 stack 堆栈容器简介1、stack 堆栈容器引入2、stack 堆栈容器特点3、stack 堆栈容器与 deque 双端数组容器对比 二、 代码示例 - stack 堆栈容器简单示例1、代码示例2、执行结果 一、 stack 堆栈容器简介 1、stack 堆栈容器引入 C 语言中的 STL 标准模板库 中的 s…

【Java】springmvc

文章目录 SpringMVC1、SpringMVC简单入门2、请求与响应2.1、请求映射路径2.2、接收请求参数2.3、接收请求体2.4、Convertor接口2.5、接收时间日期2.6、响应数据 3、REST风格RESTful快速开发 4、异常处理器5、拦截器5.1、拦截器制作5.2、拦截器三个方法的参数5.3、拦截器链 Spri…

excel统计分析——S-W正态性检验

参考资料&#xff1a; [1]马兴华,张晋昕.数值变量正态性检验常用方法的对比[J].循证医学,2014,14(02):123-128. 统计推断——正态性检验&#xff08;图形方法、偏度和峰度、统计&#xff08;拟合优度&#xff09;检验&#xff09;_sm.distributions.ecdf-CSDN博客 【统计学】…

智能优化算法应用:基于向量加权平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于向量加权平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于向量加权平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.向量加权平均算法4.实验参数设定…

LabVIEW与PID在温度测控系统中的应用

LabVIEW与PID在温度测控系统中的应用 本案例介绍LabVIEW在温度控制系统中的应用&#xff0c;特别是结合PID算法。项目使用abVIEW作为主要开发工具&#xff0c;配合NI PCI-7831R数据采集和控制设备&#xff0c;实现了高效的温度调节。 系统的核心在于LabVIEW的FPGA模块&#x…

基于JAVA的超市账单管理系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统设计3.1 总体设计3.2 前端设计3.3 后端设计在这里插入图片描述 四、系统展示五、核心代码5.1 查询供应商5.2 查询商品5.3 新增超市账单5.4 编辑超市账单5.5 查询超市账单 六、免责说明 一、摘要 1.1 项目介绍 基于…

游戏服务器列表-增量处理

前言&#xff1a;服务器列表比较简单 固定表/开服表&#xff08;一般只会增加及合并),操作频率很低 一般由 服务器ID IP NAME 开服时间 状态表 服务器ID 状态 这章主要针对 开服表 优化处理 这工具主要是配置前面openresty&#xff08;登录服/微中台&#xff09;给运维人员 使用…

【Pytorch】学习记录分享7——PyTorch数据增强/经典网络架构训练图像分类模型

【Pytorch】学习记录分享7——PyTorch 1. 数据增强、transform 模块数据预处理部分&#xff1a;网络模块设置&#xff1a;网络模型保存与测试 2. 迁移学习3. 参考pytorch官网例子 1. 数据增强、transform 模块 数据预处理部分&#xff1a; 数据增强&#xff1a;torchvision中…

MOSFET管驱动设计细节,波形分析

MOSFET管驱动设计细节,波形分析 Chapter1 MOSFET管驱动设计细节,波形分析MOSFET驱动芯片的内部结构MOS驱动电路设计需要注意的地方MOS管驱动电路参考MOS管驱动电路的布线设计常见的MOS管驱动波形高频振铃严重的毁容方波又胖又圆的肥猪波打肿脸充正弦的生于方波他们家的三角波大…

性能篇:字符串性能优化不容小觑

嗨&#xff0c;大家好&#xff01;我是小米&#xff0c;一个热衷于技术分享的小伙伴。今天&#xff0c;我们一起来聊一聊在Java中如何优化字符串性能&#xff0c;探讨一些令人激动的方法&#xff0c;让你的程序在处理字符串时更加高效&#xff01; 为什么String设计为不可变性…

微机原理与接口技术——并行I/O接口(8255A)

文章目录 一、内部结构、端口地址以及与系统总线的连接1、8255A的内部结构2、8255A的端口地址与读/写操作端口地址读/写操作 3、系统总线 二、8255A三种工作方式&#xff08;方式0 ~方式2 &#xff09;的工作特点和I/O过程工作方式工作特点 三、在方式1中C口哪几个引脚作为信号…

Plantuml之时序图语法介绍(二十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

无线路由器DHCP导致网络故障一例

多个DHCP故障 这几天公司网络很难用&#xff0c;也不知道原因。通过路由器的检测功能&#xff0c;领导截图如下&#xff1a; 故障解决 其实解决办法也很简单&#xff0c;就是关闭设备排查。结果发现是一个无线路由器导致的。进入路由器管理界面&#xff0c;关闭DHCP即可。 反思…

windows server 2008 R2 x64 基础知识(2)

一、防火墙设置 1.windows防火墙的种类&#xff1a; 1)工作组网络环境 2)域网络环境 2.防火墙的配置 1)打开管理工具&#xff1a;win->管理工具->高级安全windows防火墙 2)管理配置&#xff1a; (1)防火墙的数据流类型 a.入站流量&#xff1a;外部访问内部分流量 b…

Springsecurty【2】认证连接MySQL

1.前期准备 基于Spring Initializr创建SpringBoot项目&#xff08;基于SpringBoot 2.7.12版本&#xff09;&#xff0c;实现与MyBatisPlus的项目整合。分别导入&#xff1a;CodeGenerator和MyBatisPlusConfig。 CodeGenerator&#xff1a;用于MybatisPlus代码生成&#xff1b;…