当前位置: 首页 > 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活动目录介绍和使用 内网渗透(六)之基…...

gitlab 安装到项目上传一篇解决

文章目录1.安装1.1创建挂载目录1.2启动1.3 配置gitlab查看docker admin 账户初始密码注册普通用户2.1进入注册2.2创建后通过登录admin审批3.2 步骤13.2 步骤23.3步骤33.4 项目添加成员4 使用成员用户,上传到新建的项目中4.1 复制项目地址4.2使用 git here 克隆项目4.3进入下载目…...

Verilog 逻辑与()、按位与()、逻辑或(||)、按位或(|)、等于(==)、全等(===)的区别

逻辑与&#xff08;&&&#xff09;逻辑与是一个双目运算符&#xff0c;当符号两边为1时输出1&#xff0c;符号两边为0时输出0。真值表&#xff1a;&&01xz00000101xxx0xxxz0xxx两个4bit的数字相与&#xff1b;A4b0x1z&#xff1b;B4b01xx&#xff1b;C4b00xz&am…...

剑指 Offer 22. 链表中倒数第k个节点

剑指 Offer 22. 链表中倒数第k个节点 难度&#xff1a;easy\color{Green}{easy}easy 题目描述 输入一个链表&#xff0c;输出该链表中倒数第k个节点。为了符合大多数人的习惯&#xff0c;本题从1开始计数&#xff0c;即链表的尾节点是倒数第1个节点。 例如&#xff0c;一个链…...

数据结构预算法之买卖股票的最好时机(三)动态规划

目录&#xff1a;一.题目知识点&#xff1a;动态规划二.动态规划数组思路确定1.dp数组以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组一.题目知识点&#xff1a;动态规划动态规划算法的基本思想是&#xff1a;将待求解的问题分解成若干个相互联…...

【数通网络交换基础梳理2】三层设备、网关、ARP表、VLAN、路由表及跨网段路由下一跳转发原理

一、不同网段如何通讯 同网段可以依靠二层交换机通讯&#xff0c;网络中存在多个网段192.168.1.1/24 172.16.1.1/24 173.73.1.1/24情况下如何互相通讯&#xff1f;上节留一下的问题&#xff0c;这节继续讲解。 1、这里以Ping命令讲解&#xff0c;PC1 ping173.73.1.2&#xf…...

Java-排序链表问题

Java-排序链表问题题目题解方法&#xff1a;自顶向下归并排序算法题目 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 示例 2&#xff1a; 示例 3&#xff1a; 提示&#xff1a; *链表中节点的数目在范围 [0, 5 * 104]…...

c++之二叉树【进阶版】

前言 在c语言阶段的数据结构系列中已经学习过二叉树&#xff0c;但是这篇文章是二叉树的进阶版&#xff0c;因为首先就会讲到一种树形结构“二叉搜索树”&#xff0c;学习二叉搜索树的目标是为了更好的理解map和set的特性。二叉搜索树的特性就是左子树键值小于根&#xff0c;右…...

【数据库】 SQLServer

SQL Server 安装 配置 修改SQL Server默认的数据库文件保存路径_ 认识 master &#xff1a;是SQL Server中最重要的系统数据 库&#xff0c;存储SQL Server中的元数据。 Model&#xff1a;模板数据库&#xff0c;在创建新的数据库时&#xff0c;SQL Server 将会复制此数据…...

Linux 4.19 内核中 spinlock 概览

Linux内核中 spinlock相关数据结构和代码实现涉及的文件还是挺多的&#xff0c;这篇博客尝试从文件的角度来梳理一下 spinlock的相关数据结构和代码实现&#xff0c;适合想大概了解 Linux内核中 spinlock从上层 API到底层实现间的调用路径和传参变化&#xff0c;尤其适合了解 s…...

TensorFlow 1.x学习(系列二 :1):基本概念TensorFlow的基本介绍,图,会话,会话中的run(),placeholder(),常见的报错

目录1.基本介绍2.图的结构3.会话&#xff0c;会话的run方法4.placeholder5.返回值异常写在前边的话&#xff1a;之前发布过一个关于TensorFlow1.x的转载系列&#xff0c;自己将基本的TensorFlow操作敲了一遍&#xff0c;但是仍然有很多地方理解的不够深入。所以重开一个系列&am…...