当前位置: 首页 > news >正文

Java中的Stream

Stream流的特点

 中间操作返回的是Stream类型,终结操作返回的是void

中间操作的这个Lazy指的是增加待处理操作,而不会真的处理(放队列里),集合中的数据并未实际改变,到终结操作的时候才会把这些放队列里的操作批量执行

每个操作都是对应一个函数式接口,例如

filter方法对应的是Predict这个函数式接口

forEach对应的是Consume这个函数式接口

具体哪个方法对应哪个接口可以到Stream这个类里去找

 

 获取流的演示

import java.util.*;
import java.util.stream.Stream;public class GetStream {public static void main(String[] args) {//从list获取streamList<String> list = new ArrayList<>();Stream<String> stream = list.stream();//从set获取streamSet<String> set = new HashSet<>();Stream<String> stream1 = set.stream();Map<String, String> map = new HashMap<>();//获取map中的键,存储到一个Set集合里Set<String> keySet = map.keySet();Stream<String> stream2 = keySet.stream();//获取map里的值得集合,存储到一个Collection集合里Collection<String> values = map.values();Stream<String> stream3 = values.stream();//获取键值对Set<Map.Entry<String, String>> entries = map.entrySet();Stream<Map.Entry<String, String>> stream4 = entries.stream();//把数组转换为Stream流Integer[] arr = {1, 2, 3, 4, 5};String[] arr2 = {"a", "ab", "abc"};Stream<Integer> arr1 = Stream.of(arr);Stream<String> arr21 = Stream.of(arr2);}
}

一个Stream不管经历过何种操作都不能再次使用

public static void main(String[] args) {Stream<String> stream = Stream.of("张三丰", "张无忌", "张朝阳");Stream<String> stream1 = stream.filter(name -> name.startsWith("张"));//这样写是不行的,因为Stream属于管道流,只能被使用一次,不管怎么使用//第一个Stream流调用完毕,数据就会被转到下一个Stream上//而这时一个Stream流已经使用完毕,就会关闭了//所以第一个stream就不能再调用了,不然会出现java.lang.IllegalStateException: stream         has already been operated upon or closed//System.out.println(stream.count());stream1.forEach(name-> System.out.println(name));
}

concat

skip

 

 collect函数

import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class Stream_collect {public static void main(String[] args) {//创建List集合对象List<String> list = new ArrayList<>();list.add("诸葛亮");list.add("刘备");list.add("关云长");list.add("张翼德");list.add("赵云");//得到名字为三个字的流Stream<String> stream = list.stream().filter(s -> s.length() == 3);//把使用Stream流操作完毕的数据收集到List集合中遍历List<String> stringList = stream.collect(Collectors.toList());for(String name : stringList) {System.out.println(name);}//创建一个Set集合Set<Integer> set = new HashSet<>();set.add(33);set.add(44);set.add(55);set.add(66);//得到大于35的流Stream<Integer> stream1 = set.stream().filter(age -> age > 35);Set<Integer> integerSet = stream1.collect(Collectors.toSet());for(int age : integerSet) {System.out.println(age);}//定义一个字符串数组,每一个字符串数组由姓名和年龄组成String[] strArray = {"刘备,50", "诸葛亮,40", "张飞,40","关羽,45"};Stream<String> stream2 = Stream.of(strArray).filter(s -> Integer.parseInt(s.split(",")[1]) >= 45);Map<String, Integer> map = stream2.collect(Collectors.toMap(s -> s.split(",")[0],s -> Integer.parseInt(s.split(",")[1])));Set<String> keySet = map.keySet();for(String key : keySet) {System.out.println(key);}}
}

对应运行结果如下:

诸葛亮
关云长
张翼德
66
55
44
关羽
刘备

相关文章:

Java中的Stream

Stream流的特点 中间操作返回的是Stream类型&#xff0c;终结操作返回的是void 中间操作的这个Lazy指的是增加待处理操作&#xff0c;而不会真的处理&#xff08;放队列里&#xff09;&#xff0c;集合中的数据并未实际改变&#xff0c;到终结操作的时候才会把这些放队列里的操…...

【数据库】关系数据理论

第六章关系数据理论 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r9ETJ75y-1677334548439)(imgs/image-20220508202554924.png)] 数据依赖 是一个关系内部属性与属性之间的一种约束关系 函数依赖多值依赖 函数依赖 [外链图片转存失败,源站可…...

初阶C语言——结构体【详解】

文章目录1. 结构体的声明1.1 结构的基础知识1.2 结构的声明1.3 结构成员的类型1.4 结构体变量的定义和初始化2. 结构体成员的访问3. 结构体传参1. 结构体的声明 1.1 结构的基础知识 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 …...

盘点:9款身份和访问管理工具

身份和访问管理&#xff08;IAM&#xff09;长期以来一直是安全领导者职业生涯的关键“试炼场”&#xff0c;许多人在身份技术部署方面做出了事关成败的决定。 确保安全访问和身份管理是网络安全态势的两大基础 。同时&#xff0c;人员、应用程序和系统登录的方式以及它们彼此集…...

Linux下的进程地址空间

Linux下的进程地址空间程序地址空间回顾从代码结果推结论引入进程地址空间页表为什么要有进程地址空间重新理解进程地址空间程序地址空间回顾 我们在初学C/C的时候&#xff0c;我们会经常看见老师们画这样的内存布局图&#xff1a; 可是这真的是内存吗&#xff1f; 如果不是它…...

Web Spider Ast-Hook 浏览器内存漫游 - 数据检索

文章目录一、资源下载二、通过npm安装anyproxy模块三、anyproxy的介绍以及基本使用1. anyproxy的功能介绍2. anyproxy的基本使用四、给浏览器挂代理五、实操极验demo案例总结提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、资源下载 Github&#x…...

开源启智,筑梦未来!第四届OpenI/O启智开发者大会开幕

2023年2月24日&#xff0c;第四届OpenI/O启智开发者大会在深圳顺利开幕。本次活动由鹏城实验室、新一代人工智能产业技术创新战略联盟&#xff08;AITISA&#xff09;主办&#xff0c;OpenI启智社区、中关村视听产业技术创新联盟&#xff08;AVSA&#xff09;承办&#xff0c;华…...

CS144-Lab6

概述 在本周的实验中&#xff0c;你将在现有的NetworkInterface基础上实现一个IP路由器&#xff0c;从而结束本课程。路由器有几个网络接口&#xff0c;可以在其中任何一个接口上接收互联网数据报。路由器的工作是根据路由表转发它得到的数据报&#xff1a;一个规则列表&#…...

最好的个人品牌策略是什么样的

在这个自我营销的时代&#xff0c;个人品牌越来越受到人们的重视。您的个人品牌的成功与否取决于您在专业领域拥有的知识&#xff0c;以及拥有将这些知识传达给其他用户的能力。如果人们认为您没有能力并且无法有效地分享有用的知识&#xff0c;那么您就很难获得关注并实现长远…...

第四届国际步态识别竞赛HID2023已经启动,欢迎报名

欢迎参加第四届HID 2023竞赛&#xff0c;证明您的实力&#xff0c;推动步态识别研究发展&#xff01;本次竞赛的亮点&#xff1a;总额人民币19,000元奖金&#xff1b;最新的SUSTech-Competition步态数据集&#xff1b;比上一届更充裕的准备时间&#xff1b;OpenGait开源程序帮您…...

「2」指针进阶——详解

&#x1f680;&#x1f680;&#x1f680;大家觉不错的话&#xff0c;就恳求大家点点关注&#xff0c;点点小爱心&#xff0c;指点指点&#x1f680;&#x1f680;&#x1f680; 目录 &#x1f430;指向函数指针数组的指针(很少用&#xff0c;了解) &#x1f430;回调函数&…...

计网笔记 网络层(端到端的服务)

第三章 网络层&#xff08;端到端的服务&#xff09; **TCP/IP体系中网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。**网路层不提供服务质量的承诺&#xff0c;不保证分组交付的时限&#xff0c;所传送的分组可能出错、丢失、重复和失序。进程之间通信的…...

[蓝桥杯 2018 省 B] 日志统计——双指针算法

题目描述小明维护着一个程序员论坛。现在他收集了一份“点赞”日志&#xff0c;日志共有 N 行。其中每一行的格式是 ts id&#xff0c;表示在 ts 时刻编号 id 的帖子收到一个“赞”。现在小明想统计有哪些帖子曾经是“热帖”。如果一个帖子曾在任意一个长度为 DD 的时间段内收到…...

SpringMVC请求转发和重定向

请求转发&#xff1a;forward:重定向&#xff1a;redirect转发&#xff1a;由服务器的页面进行跳转&#xff0c;不需要客户端重新发送请求&#xff1a;特点如下&#xff1a;1、地址栏的请求不会发生变化&#xff0c;显示的还是第一次请求的地址2、请求的次数&#xff0c;有且仅…...

如何建立项目标准化评价体系?【锦狸】

PMO团队面临着管理多个项目&#xff0c;甚至是多个项目集&#xff0c;多个产品集的问题&#xff0c;那么如何对项目们进行标准化评价体系的建设&#xff0c;就是PMO需要首先思考的问题。 首先我们要关注项目的背景&#xff0c;了解了项目背景之后&#xff0c;我们才可以明确项…...

Vue基础入门讲义(二)-语法基础

文章目录1.vue入门案例1.1.HTML模板1.2.vue渲染1.3.双向绑定1.4.事件处理2.Vue实例2.1.创建Vue实例2.2.模板或元素2.3.数据2.4.方法3.生命周期钩子3.1.生命周期3.2.钩子函数3.3.this1.vue入门案例 1.1.HTML模板 在项目目录新建一个HTML文件 01-demo.html 1.2.vue渲染 01-d…...

应广单片机用8位乘法器实现16位乘法运算

应广单片机例如pms150&#xff0c;pms152这种是没有带乘法器的&#xff0c;如果需要进行乘法运算&#xff0c;可以用ide里面“程序产生器”菜单里面 产生乘法函数&#xff0c;把数据填入对应的参数&#xff0c;然后调用函数就可以实现乘法运算了。除此之外&#xff0c;应广还有…...

Android中使用GRPC简明教程

引言 Android作为一个开发平台&#xff0c;本身是使用java进行封装的&#xff0c;因此java可以调用的库&#xff0c;在Android中同样可以进行调用&#xff0c;这样就使得Android设备具有丰富的功能&#xff0c;可以进行各种类型的开发。 这篇文章就介绍如何在Android设备中使…...

【Linux】使用U盘自动化安装Linux(VMware虚拟机)

文章目录前言一、准备二、新建虚拟机2.1 创建虚拟机2.2 新增硬盘2.3 系统启动项三、加电运行四、EFI方式五、总结前言 一、准备 基于之前的基础【Linux】Kickstart 配置U盘自动化安装Linux系统&#xff0c;现在我们可以在虚拟机中尝试自动化安装Linux系统。 二、新建虚拟机 …...

内网渗透(五十七)之域控安全和跨域攻击-基于服务账户的非约束委派攻击

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中&#xff0c;集合判空是一个常见但容易出错的场景。传统方式虽然可行&#xff0c;但存在一些潜在问题&#xff1a; // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...