stream()流的使用
文章目录
- 引入流
- 流的操作
- 中间操作
- 终端操作
- 流的使用
- 谓词筛选
- 筛选各异的元素
- 流的切片
- 截断流
- 跳过元素
- 映射
- 流的扁平化
- 查找和匹配
- 归约
- 元素求和、最大值和最小值
- 数值流
- 构建流
- 由值构建流
- 由数组创建流
引入流
- java api提供的一种利用声明式的方式处理数据集合的一个东西,可以被看成一个高级迭代器
流的操作
流水线:也就是很多流操作本身会返回一个流,可以将多个操作连接起来,形成一个更大的流
- filter() :谓词过滤,筛选出适合条件的实体
- sorted():对集合进行排序
- map():提取某项元素
- collect():将流转换为其它形式
- limit():截断流,是元素不超过给定数量
- 流的迭代是内部迭代,外部迭代一般是有程序员控制的迭代,foreach就属于外部迭代,并且流只能遍历一次
中间操作
- 像filter、sorted等都会生成一个流,中间操作也就是会将这些流合并成一个流,这个东西也叫做合并循环
终端操作
- 终端操作会从流水线生成结果,其结果是任何不是流的值,比如List、Integer、void等
//forEach会返回void的终端操作
menu.stream().forEach(System.out.println);
流的使用
谓词筛选
- 因为流支持filter操作,filter是属于行为参数化的,可以通过谓词来筛选出我们需要的元素
筛选各异的元素
- 流可以使用distinct()方法,它会返回一个各异元素的流(底层是通过hashcode和equals()实现)
流的切片
- takewhile(): filter()会把所有的元素都过一遍,如果数据量过大,速度会非常慢,takewhile()当遇到不符合的元素会停止处理,大大节约了时间
- dropwhile():dropwhile()是对takewhile()的补充,它会丢弃掉谓词为false的元素,当谓词为true,它会停止处理,并返回谓词为false的元素
截断流
- 上面提到了,对流进行截断,返回给定数量的元素
跳过元素
- skip(n):跳过给定数量的元素,如果 n 大于元素个数,则会返回一个空的流
映射
映射是指map()操作,它会返回我们指定的元素属性
流的扁平化
flatMap()的作用是,各个数组并不是分别映射成一个流,而是映射成流的内容
例子: 给定一个单词表["Hello", "World"], 想要返回列表['H', 'e', 'l', 'o', 'W', 'r', 'd']第一次尝试:word.stream().map(item->item.split(" ")).distinct().toCollect()map(item->item.split())的返回结果是Stream<String[]>,我们需要的是Stream<String>,distinct操作并不能形成我们想要的结果第二次尝试:word.stream().map(item->item.split(" ")).map(Arrays::stream).distinct().collect()map(Arrays::stream)是将每一个数组变为一个流,并不能达到我们要的结果第三次尝试:word.stream().map(item->item.split(" ")).flatMap(Arrays::stream).distinct().collect()flatMap(Arrays::stream)会将每一个数组的内容分别映射为流的内容,然后将流合并形成一个流,在进行distinct()就可以达到效果
查找和匹配
常见的数据处理的套路是看数据集中的某些元素是否匹配一个给定的元素,Stream Api通过allMatch、anyMatch、noneMatch、findFirst和findAny实现
- anyMatch():流中是否有一个元素能匹配给定的谓词
- noneMatch():所有元素是否匹配给定的谓词
- noneMatch():确保没有元素与给定的谓词匹配
- findAny():返回当前流的任意元素
- findFirst():指定流中元素的出现顺序
Optional:一般用来处理空指针异常的,允许程序中出现null了,一般来说查询的返回结果可以给一个OptionalisPresent():有值返回true,没有值返回falseifPresent(Consumer<T> block): 会在存在值的时候执行代码块get(T other): 会在值存在时返回值,不存在值抛出异常orElse(): 存在值就返回值,不存在值就返回一个默认值
归约
将流中的元素反复结合起来,得到一个值,这样的操作叫做归约操作,归约的优势在于内部迭代和并行化,并行化就是将stream()变为parallelStream()
- reduce(初始值一般为0, 需要的操作)
int sum = numbers.stream().reduce(0, Integer::sum);
//无初始值的情况
Optional<Integer> sum = numbers.stream().reduce((a,b)-> (a+b));
元素求和、最大值和最小值
Optional<Integer> sum = numbers.stream().reduce(0, Integer::sum);
Optional<Integer> max = numbers.stream().reduce(Integer:max);
Optional<Integer> min = numbers.stream().reduce(Integer:min);
数值流
- mapToInt(): 返回一个IntStream()
- mapToDouble():返回一个DoubleStream()
- OptionalInt 的默认值是0,用来求和还行,求最大值不适用
- rangeClosed(1,100):是IntStream的一个方法,可以规定数值范围
//使用归约求涉及到拆包的问题
int sum = numbers.stream().reduce(0, Integer::sum);
//map的返回值是Stream<类>,不行
Optional<Integer> sum = numbers.stream().map(类::方法).sum();
//maptoInt()的返回值是IntStream,还支持max()、min()、average()等
Optional<Integer> sum = numbers.stream().mapToInt(类::方法).sum();
//使用orElse来指定OptionalInt的值,如果没有最大值,显方式提供一个默认最大值
OptionalInt<Integer> test = xxx;
int max = test.orElse(1);
构建流
由值构建流
Stream<String> stream = Stream.of("modern", "java", "In", "Action");
stream.map(String :: toUpperCase).forEach(System.out::println);
//创建一个空的流
Stream<String> emptyStream = Stream.empty();
由数组创建流
int[] numbers = {2, 3, 5, 7, 11, 13};
int sum = Arrays.stream(numbers).sum();
相关文章:
stream()流的使用
文章目录引入流流的操作中间操作终端操作流的使用谓词筛选筛选各异的元素流的切片截断流跳过元素映射流的扁平化查找和匹配归约元素求和、最大值和最小值数值流构建流由值构建流由数组创建流引入流 java api提供的一种利用声明式的方式处理数据集合的一个东西,可以…...
C++学习笔记-常量
在程序执行过程中,其值不能改变的量称为常量(Constant)。普通常量的类型是根据数据的书写形式来决定的。如 100 是整型常量,0.5 是实型常量,‘q’ 是字符型常量,“qianfeng” 是字符串常量。 常量是固定值,在程序执行期…...
JavaScript系列之实现继承的几种方式
文章の目录一、借助父构造函数继承属性1、实现方式2、优点3、缺点二、原型链继承1、实现方式2、优点3、缺点三、组合继承四、ES6继承的实现方式参考写在最后一、借助父构造函数继承属性 1、实现方式 先定义一个父构造函数(this指向为window);再定义一个子构造函数…...
java面试准备
1.自我介绍: 2.基础 : 1.集合 : java容器中分为collection 和map两大类 collection 分为list集合(有序且重复的),set集合(无序,不可重复) list集合分为arrayList集合 : 查询快,增删慢,它是基于数组结构的,对数据的增删是在数组的尾部进行添加或删除的,其效率相对于LinkedList…...
kafka-6-python单线程操作kafka
使用Python操作Kafka:KafkaProducer、KafkaConsumer Python kafka-python API的帮助文档 1 kafka tools连接 (1)/usr/local/kafka_2.13-3.4.0/config/server.properties listeners PLAINTEXT://myubuntu:9092 advertised.listenersPLAINTEXT://192.168.1.8:2909…...
【Spring教程】1.Spring概述
1、概述 1.1、Spring是什么? Spring 是一款主流的 Java EE 轻量级开源框架 ,Spring 由“Spring 之父”Rod Johnson 提出并创立,其目的是用于简化 Java 企业级应用的开发难度和开发周期。Spring的用途不仅限于服务器端的开发。从简单性、可测…...
设计模式-代理模式
控制和管理访问 玩过扮白脸,扮黑脸的游戏吗?你是一个白脸,提供很好且很友善的服务,但是你不希望每个人都叫你做事,所以找了黑脸控制对你的访问。这就是代理要做的:控制和管理对象。 监视器编码 需求&…...
DPDK — MALLOC(librte_malloc,Memory Manager,内存管理组件)
目录 文章目录 目录MALLOC(librte_malloc,Memory Manager,内存管理组件)rte_malloc() 接口malloc_heap 结构体malloc_elem 结构体内存初始化流程内存申请流程内存释放流程MALLOC(librte_malloc,Memory Manager,内存管理组件) MALLOC 库基于 hugetlbfs 内核文件系统来实…...
【Java开发】Spring 12 :Spring IOC控制反转和依赖注入(解决单接口多实现类调用)
IOC 是 Inversion of Control 的简写,译为“控制反转”,Spring 通过 IOC 容器来管理所有 Java 对象的实例化和初始化,控制对象与对象之间的依赖关系。我们将由 IOC 容器管理的 Java 对象称为 Spring Bean,它与使用关键字 new 创建…...
【C++学习】基础语法(三)
众所周知C语言是面向过程的编程语言,关注的是过程;解决问题前,需要分析求解的步骤,然后编辑函数逐步解决问题。C是基于面向对象的,关注的是对象,将一件事拆分成不同的对象,不同对象间交互解决问…...
k8s自动化安装脚本(kubeadm-1.23.7)
文章目录介绍软件架构版本介绍更新内容2023-02-192023-02-152023-02-142023-02-102022-10-202022-08-06准备部署包操作步骤环境准备结构备注解压部署包修改host文件脚本使用方式初始化环境验证ansible配置安装k8s集群登录master的节点添加node节点master节点状态检查组件安装安…...
面试题记录
Set与Map的区别 map是键值对,set是值的集合。键,值可以是任何类型map可以通过get获取,map不能。都能通过迭代器进行for…of遍历set的值是唯一的,可以做数组去重,map,没有格式限制,可以存储数据…...
链式前向星介绍以及原理
1 链式前向星 1.1 简介 链式前向星可用于存储图,本质上是一个静态链表。 一般来说,存储图常见的两种方式为: 邻接矩阵邻接表 邻接表的实现一般使用数组实现,而链式前向星就是使用链表实现的邻接表。 1.2 出处 出处可参考此…...
jenkins 安装 -适用于在线安装 后续写个离线安装的
jenkins安装1.下载jenkins2.安装启动3.附件卸载jdk的命令4.配置jenkins一、在jenkins配置文件中配置jdk环境变量二、修改jenkins默认的操作用户1.下载jenkins jenkins官网下载 https://www.jenkins.io/ 点击下载 我是centos系统所以选择centos,点击后按着官方提供…...
【C++】再谈vscode界面调试C++程序(linux) - 知识点目录
再谈vscode界面调试C程序(linux) 配套文档:vscode界面调试C程序(linux) 命令解释 g -g ../main.cpp 编译main.cpp文件; -g:生成调试信息。编译器会在可执行文件中嵌入符号表和源代码文件名&…...
蚂蚁感冒---第五届蓝桥杯真题
目录 题目链接 题目描述 分析: 代码: y总综合 666 题目链接 1211. 蚂蚁感冒 - AcWing题库 题目描述 分析: y总真牛逼,掉头等价于穿过,以第一个点为分界点,分别判断 代码: (自…...
常见排序算法--Java实现
常见排序算法--Java实现插入排序直接插入排序折半插入排序希尔排序交换排序冒泡排序快速排序选择排序直接选择排序堆排序归并排序基数排序各种排序方法比较在网上找了些排序算法的资料。此篇笔记本人总结比较,简单注释,觉得比较好理解,且相对…...
算法笔记(九)—— 暴力递归
暴力递归(尝试) 1. 将问题转化为规模缩小了的同类问题子问题 2. 有明确的不需要的继续递归的条件 3. 有当得到子问题结果之后的决策过程 4. 不记录每一个子问题的解 Question:经典汉诺塔问题 1. 理解清楚,基础三个圆盘的移动…...
Flask框架学习记录
Flask项目简要 项目大致结构 flaskDemo1 ├─static ├─templates └─app.py app.py # 从flask这个包中导入Flask类 from flask import Flask# 使用Flask类创建一个app对象 # __name__:代表当前app.py这个模块 # 1.以后出现bug,可以帮助快速定位 # 2.对于寻找…...
【Opencv 系列】 第6章 人脸检测(Haar/dlib) 关键点检测
本章内容 1.人脸检测,分别用Haar 和 dlib 目标:确定图片中人脸的位置,并画出矩形框 Haar Cascade 哈尔级联 核心原理 (1)使用Haar-like特征做检测 (2)Integral Image : 积分图加速特征计算 …...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
Python 高级应用10:在python 大型项目中 FastAPI 和 Django 的相互配合
无论是python,或者java 的大型项目中,都会涉及到 自身平台微服务之间的相互调用,以及和第三发平台的 接口对接,那在python 中是怎么实现的呢? 在 Python Web 开发中,FastAPI 和 Django 是两个重要但定位不…...
Qt学习及使用_第1部分_认识Qt---Qt开发基本流程
前言 学以致用,通过QT框架的学习,一边实践,一边探索编程的方方面面. 参考书:<Qt 6 C开发指南>(以下称"本书") 标识说明:概念用粗体倾斜.重点内容用(加粗黑体)---重点内容(红字)---重点内容(加粗红字), 本书原话内容用深蓝色标识,比较重要的内容用加粗倾…...
Q1起重机指挥理论备考要点分析
Q1起重机指挥理论备考要点分析 一、考试重点内容概述 Q1起重机指挥理论考试主要包含三大核心模块:安全技术知识(占40%)、指挥信号规范(占30%)和法规标准(占30%)。考试采用百分制,8…...
智能照明系统:具备认知能力的“光神经网络”
智能照明系统是物联网技术与传统照明深度融合的产物,其本质是通过感知环境、解析需求、自主决策的闭环控制,重构光与人、空间、环境的关系。这一系统由智能光源、多维传感器、边缘计算单元及云端管理平台构成,形成具备认知能力的“光神经网络…...
