Java学习_18_Stream流

news2025/1/9 20:37:06

文章目录

  • 前言
  • 一、不可变集合
  • 二、Stream流
    • 思想
    • 第一步:得到Stream流
    • 第二步:Stream流的中间方法
    • Stream流的终结方法
  • 总结


前言

博客仅记录个人学习进度和一些查缺补漏。
学习内容:BV17F411T7Ao


一、不可变集合

不可变集合就是长度和内容都不可变的集合

在这里插入图片描述
即直接使用静态方法来创建
在这里插入图片描述
例如:
在这里插入图片描述
在这里插入图片描述
set没有索引,只能通过迭代器或增强for来遍历
并且set集合元素是唯一的,可以用来去重,同时在获取静态set时,要注意其中不可以有重复元素

list和set的of方法底层是可变参数

在这里插入图片描述
细节1:键是不能重复的。
细节2:静态map中最多只能传入10个元素。
map的传入参数都是写死的,做多只有10个,因为想要传入多个不确定数量的键和值,就需要传入键和值两个可变参数,但是可变参数只能只有一个
在这里插入图片描述
细节3:如果需要传递多个可变的键值对,可以直接传入entry对象
(默认使用hashmap)
但是需要注意entry实际上是map的内部类,我们需要先创建一个普通的map集合,然后将其中的entry使用toArry方法转换成一个数组。
在这里插入图片描述
在这里插入图片描述
简化版:
在这里插入图片描述
极简版:
在这里插入图片描述
注意,copyof方法在JDK10以上才能使用。

二、Stream流

思想

stream流就是将数据变成一个流水线上的对象(创造一个流水线),然后依次对其进行操作处理
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第一步:得到Stream流

在这里插入图片描述

        //获取单列集合的steam流
        ArrayList<String> arrayList = new ArrayList<>();
        Collections.addAll(arrayList, "a", "b", "c", "d","e");

        //获取一条流水线,并把集合放上去
        Stream<String> stream = arrayList.stream();
        //直接打印看看,结果是地址值
        System.out.println(stream);//java.util.stream.ReferencePipeline$Head@776ec8df
        //使用循环打印
        stream.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });

        //简化版本
        arrayList.stream().forEach(s -> System.out.println(s));
        
        //获取双列集合的steam流
        HashMap<String, String> hashMap = new HashMap<>();
        //添加数据
        hashMap.put("a", "1");
        hashMap.put("b", "2");
        hashMap.put("c", "3");
        hashMap.put("d", "4");
        hashMap.put("e", "5");
        //获取stream流,注意,map是双列集合,不能直接获取stream流,需要分开成键流和值流
        hashMap.keySet().stream().forEach(s-> System.out.println(s));

        //获取数组的steam流
        int[] nums = {1,2,3,4,5,6,7,8,9,0};

        //使用Arrays工具类转换成stream流
        Arrays.stream(nums).forEach(s-> System.out.println(s));

        //获取零散数据的steam流
        Stream.of(1,2,3,4,5).forEach(s-> System.out.println(s));

细节:of方法内如果传入的是一个数组变量,最后打印出来的会是该变量的地址值,此时认为传入steam的是该数组变量的地址。

第二步:Stream流的中间方法

在这里插入图片描述
例如:过滤方法
在这里插入图片描述
简写为:
在这里插入图片描述
注意,中间过程(如过滤)不会对原数据产生任何影响。
limit和skip方法:
在这里插入图片描述
去重方法:底层依赖hashcode和equals方法,所以对于自定义类型时需要重写这两个方法。
在这里插入图片描述
在这里插入图片描述

数据类型转换方法:map
在这里插入图片描述
在这里插入图片描述

Stream流的终结方法

v
终结方法的返回值一般是void
在这里插入图片描述
在这里插入图片描述
将数据收集进数组中:
在这里插入图片描述
注意,这是一个函数式方法,其中参数需要是一个具体类型的数组,改写后如下:
在这里插入图片描述
lambda表达式形式:其中value为数组化后数组大小
在这里插入图片描述

将数据收集进集合中:

在这里插入图片描述

在这里插入图片描述
set和list最大的区别是set不可重复(如果出现了重复会自动去重)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:在收集到map中时,不可以使用重复的键,即不存在覆盖功能。
lambda表达式形式:
在这里插入图片描述

总结

流的出现让数据处理从几十行代码缩减到一两行就能实现,简化了很多集合数组的操作。
在这里插入图片描述

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

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

相关文章

HTML+CSS浮动和清除浮动的效果及其应用场景举例

一、清除浮动的效果 解释 .container&#xff1a;用于展示浮动和清除浮动效果的容器&#xff0c;具有边框和背景色以便于区分。 .float-box&#xff1a;浮动元素&#xff0c;用不同的背景色标识。 .clearfix&#xff1a;使用伪元素清除浮动的类&#xff0c;应用于第二个容器。 …

【chips】个人笔记系列-SystemVerilog

Title&#xff1a;System Verilog 学习 背景与发展 什么是SV 啥是SystemVerilog&#xff1f; 就是用来专门写验证和测试的 Verilog 升级版——在verilog的基础上加了些C的思想、语法、模块。 为啥要搞出一个SystemVerilog&#xff1f; 设计IC (integrated circuit)时用的是 …

02_TensorFlow2 Eager Execution:让AI编程从‘慢条斯理’变‘急不可耐’的神奇魔法!

1. Eager execution 的特性 即刻执行&#xff08;Eager execution&#xff09;是TensorFlow2.0的新特性&#xff0c;如同python解释器一样&#xff0c;执行即可获得计算结果&#xff0c;不需要手动建立图结构和会话&#xff0c;与python的兼容性更强, 为快速搭建和测试算法模型…

C语言 之 内存函数 memcpy、memmove函数的使用和模拟实现 memset、memcmp函数的使用

文章目录 1.memcpy函数的使用和模拟实现例子&#xff1a;模拟实现: 2.memmove函数的使用和模拟实现例子&#xff1a;模拟实现&#xff1a; 3.memset函数的使用**例子&#xff1a;** 3.memcmp函数的使用例子&#xff1a; 首先 我们要明确下面这些函数之所以被称作内存函数&#…

130-横向移动PTH哈希PTT票据PTK密匙Kerberos

pass the hash &#xff08;哈希传递攻击&#xff0c;简称pth&#xff09;利用lm&#xff08;老版本哈希&#xff09;或ntlm&#xff08;新版本&#xff09;的值进行的渗透测试 pass the ticket &#xff08;票据传递攻击&#xff0c;简称ptt&#xff09;利用的票据凭证TGT进行…

sql手工注入——sqli-labspage第六关到第十关

第六关 一确定攻击点判断闭合方式 跟个双引号引起报错 说明页面有报错语句的位置 http://127.0.0.1/Less-6/?id1%22http://127.0.0.1/Less-6/?id1%22尝试闭合 闭合成功 http://127.0.0.1/Less-6/?id1%22%20--http://127.0.0.1/Less-6/?id1%22%20-- 二.查询数据库名 ht…

多商户小程序审核存在商户入口无法通过

小程序拒绝如下&#xff1a; 需要注意的地方如下&#xff1a; 关闭店铺展示关闭商户入驻关闭diy中的申请入口、店铺街入口等关闭个人中心广告的申请入口关闭分销关闭支付宝

基于Java语言的能源管理系统中软网关的应用

介绍 软网关适用于建筑、工厂、商场、医院、园区、高耗能企业、城市双碳建设平台等的水、电、气、热、油等能源数据采集、加工、分析、预警、碳指标、碳排放计算等场景&#xff1b; 企业通过软网关采集底层电表数据&#xff0c;传输给时序库&#xff0c;从而完成能源管理系统…

nginx全方位讲解

安装nginx [rootnginx ~]# tar zxf nginx-1.24.0.tar.gz [rootnginx ~]# cd nginx-1.24.0/ [rootnginx nginx-1.24.0]# ls auto CHANGES.ru configure html Makefile objs src CHANGES conf contrib LICENSE man README [rootnginx nginx-…

Python编码系列—Python WebSocket 实时通信:构建高效互动的网络应用

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

基于贝叶斯优化卷积神经网络(Bayes-CNN)的多因子数据分类识别算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 贝叶斯优化过程 贝叶斯优化后的CNN训练和识别结果 标准的CNN的识别结果 2.算法运行软件版本 matlab2022a 3.部分核心程…

JavaScript(29)——函数参数

动态参数 arguments是函数内部内置的伪数组变量&#xff0c;它包含了调用函数时传入的所有实参&#xff0c;结果是一个伪数组。 function sum() {console.log(arguments);}sum(2, 3, 4)sum(6, 7) 剩余参数 剩余参数允许我们将一个不定数量的参数表示为一个数组 function sum…

深入理解HTTP的基础知识:请求-响应过程解析

首先&#xff0c;我们从网络协议的最顶层开始讲解&#xff0c;即应用层。在网络通信中&#xff0c;应用层是最接近用户的一层&#xff0c;它负责为特定的网络应用提供服务和功能。应用层协议定义了数据交换的规则和格式&#xff0c;以便不同的应用程序能够相互通信和交换信息。…

Xenu 网站死链接检测工具下载以及使用指南

引言 Xenus Link Sleuth&#xff08;简称 Xenu&#xff09;是一款功能强大的网站死链接检测工具。由于其绿色蜗牛形状的图标&#xff0c;Xenu 被广大的 SEO 人员亲切地称为“绿蜗牛”。 随着网站的发展&#xff0c;可能会因为删除过期内容或改版而导致一些死链接的产生。死链…

扫描包得到所有Bean的Class对象

文章目录 1.任务介绍以及类加载器1.介绍2.类加载器1.介绍2.自己程序的类路径 2.新建一个模块sun-spring用来写自己的spring容器1.新建模块2.查看是否交给父模块管理3.引入日志 3.具体实现1.目录2.Component.java3.ComponentScan.java4.MonsterDao.java5.MonsterService.java6.S…

第三期书生大模型实战营 进阶岛第3关LMDeploy 量化部署进阶实践

环境准备 conda create -n lmdeploy python3.10 -y conda activate lmdeploy conda install pytorch2.1.2 torchvision0.16.2 torchaudio2.1.2 pytorch-cuda12.1 -c pytorch -c nvidia -y pip install timm1.0.8 openai1.40.3 lmdeploy[all]0.5.3为方便文件管理&#xff0c;我…

Vue(一) 插值与指令语法、数据代理、MVVM模式、事件处理

文章目录 1. 初始Vue2. 模板语法2.1 插值语法2.2 指令语法 3. el与data的两种写法3.1 el的两种写法3.2 data的两种写法 4. MVVM模式5. 数据代理5.1 Object.defineProperty()5.2 何为数据代理5.4 vue中的数据代理 6. 事件处理6.1 v-on6.2 事件修饰符6.3 键盘按键事件 1. 初始Vue…

【C语言】预处理的使用

预处理 一、预处理-宏定义1、程序编译过程(1) 编写源程序(2) 程序编译过程说明 2、预处理3、宏的概念4、无参宏5、带参宏6、带参宏的副作用7、宏定义中的符号粘贴 二、预处理.条件编译1、无值宏定义2、条件编译3、条件编译的使用场景 三、预处理.头文件1、头文件的作用2. 头文件…

RTSP/Onvif安防视频监控平台EasyNVR在欧拉系统中启动失败的原因排查

视频安防监控平台EasyNVR可支持设备通过RTSP/Onvif协议接入&#xff0c;并能对接入的视频流进行处理与多端分发&#xff0c;包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等多种视频流格式。平台支持轻量化部署&#xff0c;可兼容各类操作系统&#xff0c;包括Windows、Linux…

Admin.NET源码学习(4:基于Furion的后台服务启动方式浅析)

Admin.NET为前后端分离架构&#xff0c;后台服务的入口项目为Admin.NET.Web.Entry&#xff0c;其与其它项目的依赖关系如下图所示。   由于项目采用Furion框架&#xff0c;后台服务启动方式、注册方式、配置方式等方面与常规的asp.net core项目差异明显&#xff0c;初步接触…