Java学习_18_Stream流

文章目录

  • 前言
  • 一、不可变集合
  • 二、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>() {@Overridepublic 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.mzph.cn/web/51079.shtml

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

相关文章

希尔排序,详细解析(附图解)

1.希尔排序思路 希尔排序是一种基于插入排序的算法&#xff0c;通过将原始数据分成若干个子序列&#xff0c;然后对子序列进行插入排序&#xff0c;逐渐减小子序列的间隔&#xff0c;最后对整个序列进行一次插入排序。 1.分组直接插入排序&#xff0c;目标接近有序--------…

transformers调用llama的方式

transformers调用llama的使用方式 不同版本llama对应的transformers库版本llama2llama3Meta-Llama-3-8B-InstructMeta-Llama-3-8B llama3.1Meta-Llama-3.1-8B-Instruct 不同版本llama对应的transformers库版本 # llama2 pip install torch1.13.1cu116 torchvision0.14.1cu116 …

C语言贪吃蛇之BUG满天飞

C语言贪吃蛇之BUG满天飞 今天无意间翻到了大一用C语言写的贪吃蛇&#xff0c;竟然还标注着BUG满天飞&#xff0c;留存一下做个纪念&#xff0c;可能以后就找不到了 /* 此程序 --> 贪吃蛇3.0 Sur_流沐 当前版本&#xff1a; Bug满天飞 */ #include<stdio.h> #includ…

【补充篇】AUTOSAR多核OS介绍(下)

文章目录 前文回顾1 AUTOSAR OS1.1 AUTSOAR OS元素1.1.1 操作系统对象1.1.2 操作系统应用程序1.1.3 AUTOSAR OS裁剪类型1.1.4 AUTOSAR OS软件分区1.2 AUTOSAR OS自旋锁1.3 AUTOSAR OS核间通信1.4 AUTOSAR OS多核调度前文回顾 在上篇文章【补充篇】AUTOSAR多核OS介绍(上)中,…

docker常见指令——镜像指令and容器指令

docker镜像指令 查看镜像 docker images 搜索镜像 docker search 镜像名 上传镜像 docker pull 镜像名 或 docker pull 镜像名&#xff1a;tag 注:不加:tag表示最新版本 &#xff0c;加:tag表示指定版本 运行镜像 docker run 镜像名 保存镜像 docker save 镜像名/镜像id -o 要…

OpenMax算法详解:深度学习中的高效开集识别技术

OpenMax算法详解&#xff1a;深度学习中的高效开集识别技术 在深度学习领域&#xff0c;模型的识别能力往往受限于其训练数据集的范畴。传统的分类模型&#xff0c;如卷积神经网络&#xff08;CNN&#xff09;或循环神经网络&#xff08;RNN&#xff09;&#xff0c;通常被设计…

算法5:位运算

文章目录 小试牛刀进入正题 没写代码的题&#xff0c;其链接点开都是有代码的。开始前请思考下图&#xff1a; 小试牛刀 位1的个数 class Solution { public:int hammingWeight(int n) {int res 0;while (n) {n & n - 1;res;}return res;} };比特位计数 class Solution…

关于我的生信笔记开通《知识星球》

关于知识星球 1. 为什么到现在才开通《知识星球》 从很早关注我的同学应该了解小杜的知识分享历程&#xff0c;小杜是从2021年11月底开始进入此“坑”&#xff0c;一直坚持到现在&#xff0c;马上3年了&#xff08;24年11月底到期&#xff09;。自己也从一个小青年&#xff0…

什么是网页爬虫技术

网页爬虫技术&#xff08;Web Crawler Technology&#xff09;是一种自动化浏览互联网并收集信息的程序或脚本。这些程序模拟人类用户的行为&#xff0c;通过HTTP请求访问网页&#xff0c;并解析网页内容&#xff08;通常是HTML文档&#xff09;&#xff0c;从中提取出所需的数…

hostapd生成beacon_ie

配置文件 /data/vendor/wifi/hostapd/hostapd_wlan0.conf 配置参数 AP启动过程&#xff1a;1.上层配置一些参数并根据参数生成配置文件 2.init的时候设置默认参数并加载配置文件上的参数&#xff08;如果重复&#xff0c;以配置文件上的设置优先&#xff09; 相关函数及结构…

查看U盘的具体信息,分区表格式、实际容量和分区状态

查看U盘的具体信息&#xff0c;分区表格式、实际容量和分区状态 前言&#xff1a; 利用windows自带的命令行窗口就可以 1、使用命令提示符查看MBR和GPT分区类型 &#xff08;1&#xff09;按“Windows R”键&#xff0c;在弹出的运行对话框中输入“diskpart”&#xff0c;并按…

electron 中 webPreferences 作用

webPreferences 是 BrowserWindow 构造函数中的一个选项对象&#xff0c;用于配置网页的相关偏好设置。 它包含了一系列的属性&#xff0c;用于控制网页在 Electron 窗口中的行为和功能&#xff1a; 1. nodeIntegration&#xff1a;决定是否在渲染进程中启用 Node.js 的集成。…

代码随想录算法训练营第五十五天 | 并查集理论基础、107. 寻找存在的路径

一、并查集理论基础 文章链接&#xff1a;并查集理论基础 | 代码随想录 (programmercarl.com) 二、107. 寻找存在的路径 题目连接&#xff1a;107. 寻找存在的路径 (kamacoder.com) 文章讲解&#xff1a;代码随想录 (programmercarl.com)——107. 寻找存在的路径

redis面试(十九)读写锁ReadLock

读写锁ReadLock 简单来说就是互斥锁和非互斥锁。多个客户端可以同事加的锁叫读锁&#xff0c;只能有一个客户端加的锁叫写锁。这个理论应该是从数据库中来的&#xff0c;放在这里也是同样的解释。 多个客户端同时加读锁&#xff0c;是不会互斥的&#xff0c;多个客户端可以同…

@Param注解的踩坑,报错:There is no getter for property named ‘dto‘ in ‘class

哈喽&#xff0c;大家好&#xff0c;我今天又来记录一下鄙人做后端开发的后知后觉&#xff1a; Param注解&#xff0c;相信大家都不陌生吧&#xff0c;Param 注解用于在 Mapper 接口的方法上明确指定参数的名称&#xff0c;比如如下&#xff1a; List<oucherOrderVO> li…

YOLOv8_det/seg/pose/obb推理流程

本章将介绍目标检测、实例分割、关键点检测和旋转目标检测的推理原理,基于onnx模型推理,那么首先就需要了解onnx模型的输入和输出,对输入的图片需要进行预处理的操作,对输出的结果需要进行后处理的操作,这部分内容在我的另一个专栏《YOLOv8深度剖析》中也有介绍,如果对YO…

【Leetcode 1512 】 好数对的数目—— 数组模拟哈希表 与 等差数列求和

给你一个整数数组 nums 。 如果一组数字 (i,j) 满足 nums[i] nums[j] 且 i < j &#xff0c;就可以认为这是一组 好数对 。 返回好数对的数目。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3,1,1,3] 输出&#xff1a;4 解释&#xff1a;有 4 组好数对&#xff0c;…

canal数据同步工具介绍与应用

canal服务 canal介绍canal版本与环境canal 服务集canal应用场景&#xff1a; canal常见问题xml配置问题连接认证问题jar版本问题连接问题 canal介绍 ‌1、Canal是‌阿里巴巴开源的‌MySQL增量数据订阅和消费工具&#xff0c;通过模拟MySQL的‌slave与‌master交互&#xff0c;捕…

一文搞懂微服务架构之降级

前置知识 比如双十一之类的大促高峰&#xff0c;平台是会关闭一些服务的&#xff0c;比如退款服务。这就是降级的典型应用&#xff0c;不过它是一种手动的跨服务降级&#xff0c;对于整个系统来说&#xff0c;提供了一部分服务&#xff0c;但是没有提供另外一部分服务&#xf…

InternLM2_PracticalCamp_L2_task3_LMDeploy量化部署进阶实践

1 配置LMDeploy环境 1.1 InternStudio开发机创建与环境搭建 点选开发机&#xff0c;自拟一个开发机名称&#xff0c;选择Cuda12.2-conda镜像。 我们要运行参数量为7B的InternLM2.5&#xff0c;由InternLM2.5的码仓查询InternLM2.5-7b-chat的config.json文件可知&#xff0c;…