Stream流中的常用方法(forEach,filter,map,count,limit,skip,concat)和Stream流的特点
1、forEach方法
- 该方法接收一个Consumer接口是一个 消费型 的函数式接口,可以传递Lambda表达式,消费数据
- 用来遍历流中的数据,是一个 终结 方法,遍历 之后就不能继续调用Stream流中的其他方法
package com.csdn.stream; import java.util.function.Consumer; import java.util.stream.Stream; public class Demo02Stream_forEach {public static void main(String[] args) {//获取一个Stream流Stream<String> stream = Stream.of("小明", "小兰", "小强");// stream.forEach(new Consumer<String>() { // @Override // public void accept(String s) { // System.out.println(s); // } // });// stream.forEach(name -> System.out.println(name));stream.forEach(System.out::println);//小明 小兰 小强} }
2、 filter方法
- 用于对Stream流中的数据进行 过滤 ,方法的参数Predicate是一个函数式接口,所以可以传递Lambda表达式,对数据进行过滤
package com.csdn.stream; import java.util.function.Consumer; import java.util.function.Predicate; import java.util.stream.Stream; public class Demo03Stream_filter {public static void main(String[] args) {Stream<String> stream = Stream.of("张三丰", "张翠山", "张无忌", "赵敏", "周芷若");// stream.filter(new Predicate<String>() { // @Override // public boolean test(String s) { // return s.startsWith("张"); // } // }).forEach(new Consumer<String>() { // @Override // public void accept(String s) { // System.out.println(s); // } // });// Stream<String> stream2 = stream.filter(name -> name.startsWith("张")); // stream2.forEach(System.out::println);// stream.filter(name->name.startsWith("张")).forEach(name-> System.out.println(name));stream.filter(name -> name.startsWith("张")).forEach(System.out::println); // 张三丰 // 张翠山 // 张无忌} }
3、Stream流的特点
- 只能使用一次,Stream流属于管道流,只能被消费(使用)一次,第一个Stream流调用完毕方法,数据就会流转到下一个Stream上,而这时第一个Stream流已经使用完毕,就会关闭了,所以第一个Stream流就不能再调用方法了
package com.csdn.stream; import java.util.function.Consumer; import java.util.function.Predicate; import java.util.stream.Stream; public class Demo03Stream_filter {public static void main(String[] args) {Stream<String> stream = Stream.of("张三丰", "张翠山", "张无忌", "赵敏", "周芷若");Stream<String> stream2 = stream.filter(name -> name.startsWith("张"));stream2.forEach(System.out::println);//张三丰 张翠山 张无忌//遍历Stream流stream.forEach(System.out::println);//IllegalStateException} } D:\Java\jdk-17\bin\java.exe 张三丰 张翠山 张无忌 Exception in thread "main" java.lang.IllegalStateException: stream has already been operated upon or closedat java.base/java.util.stream.AbstractPipeline.sourceStageSpliterator(AbstractPipeline.java:279)at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)at com.csdn.stream.Demo03Stream_filter.main(Demo03Stream_filter.java:16)
4、map方法
- 如果需要将流中的元素映射到另一个流中,可以使用map方法,该接口需要一个Function函数式接口,可以将当前流中的 T 类型数据转换为另一种 R 类型的流
package com.csdn.stream; import java.util.function.Consumer; import java.util.function.Function; import java.util.stream.Stream; public class Demo04Stream_map {public static void main(String[] args) {//获取一个String类型的Stream流Stream<String> stringStream = Stream.of("1", "2", "3", "4", "5");// Stream<Integer> integerStream = stringStream.map(new Function<String, Integer>() { // @Override // public Integer apply(String s) { // return Integer.parseInt(s); // } // }); // integerStream.forEach(new Consumer<Integer>() { // @Override // public void accept(Integer integer) { // System.out.println(integer); // } // });//使用map方法,把字符串类型的整数,转换(映射)为Integer类型的整数Stream<Integer> integerStream = stringStream.map(Integer::parseInt);//遍历integerStream流integerStream.forEach(System.out::println);//1 2 3 4 5 } }
5、count方法
- 用于统计Stream流中 元素的个数 ,是一个 终结方法 ,返回值是一个long类型的整数,所以不能再继续调用Stream流中的其他方法了
package com.csdn.stream; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.stream.Stream; public class Demo05Stream_count {public static void main(String[] args) {List<String> list = new ArrayList<>();Collections.addAll(list, "1", "2", "3", "4", "5");Stream<String> stream = list.stream();System.out.println(stream.count());//5} }
6、limit方法
- 用于 截取 流中的元素,limit方法可以对流进行截取,只取用前 n 个,参数是一个long型,如果集合当前长度大于参数则进行截取,否则不进行操作
- limit方法是一个 延迟方法 ,只是对流中的元素进行截取,返回的是一个新的流,所以可以继续调用Stream流中的其他方法
package com.csdn.stream; import java.util.stream.Stream; public class Demo06Stream_limit {public static void main(String[] args) {String[] arr = {"喜羊羊", "美羊羊", "懒洋洋", "灰太狼", "红太狼"};//获取一个Stream流Stream<String> arr1 = Stream.of(arr);//使用limit对Stream流中的元素进行截取,只要前3个元素Stream<String> limit = arr1.limit(3);//遍历limit流limit.forEach(System.out::println);//喜羊羊 美羊羊 懒洋洋} }
7、skip方法
- skip用于 跳过 元素,如果希望 跳过前几个元素,可以使用skip方法获取一个截取之后的新流,如果流的当前长度大于 n ,则跳过前 n 个;否则将会得到一个长度为 0 的空流
package com.csdn.stream; import java.util.stream.Stream; public class Demo07Stream_skip {public static void main(String[] args) {String[] arr = new String[]{"喜羊羊", "美羊羊", "懒洋洋", "灰太狼", "红太狼"};//获取一个Stream流Stream<String> arr1 = Stream.of(arr);//使用skip方法跳过前3个元素Stream<String> skip = arr1.skip(3);//遍历skip流skip.forEach(System.out::println);//灰太狼 红太狼} }
8、concat方法(concatenate)
- 用于把流 组合 到一起,如果有两个流,希望合并成为一个流,那么可以使用Stream接口的静态方法concat
package com.csdn.stream; import java.util.stream.Stream; public class Demo08Stream_concat {public static void main(String[] args) {String[] arr = {"喜羊羊", "美羊羊", "懒洋洋", "灰太狼", "红太狼"};//创建一个Stream流Stream<String> arr1 = Stream.of(arr);//获取一个Stream流Stream<String> arr2 = Stream.of("张三丰", "张翠山", "张无忌", "赵敏", "周芷若");//把以上两个流组合为一个流Stream<String> concatenate = Stream.concat(arr1, arr2);//遍历concatenate流concatenate.forEach(System.out::println);// 喜羊羊 美羊羊 懒洋洋 灰太狼 红太狼 张三丰 张翠山 张无忌 赵敏 周芷若} }
相关文章:
Stream流中的常用方法(forEach,filter,map,count,limit,skip,concat)和Stream流的特点
1、forEach方法 该方法接收一个Consumer接口是一个 消费型 的函数式接口,可以传递Lambda表达式,消费数据用来遍历流中的数据,是一个 终结 方法,遍历 之后就不能继续调用Stream流中的其他方法 package com.csdn.stream; import jav…...
2023大联盟2比赛总结
比赛链接 反思 T1 奇怪的贪心和构造题一直是我的软肋部分 T2 简单题 T3 也不难 T4 套路没学过,感觉还是太菜了 题解 A 考虑先给图随便染色,然后调整 因为每个点的度数为 3 3 3,所以如果有 x → u → v x\to u\to v x→u→v 的颜…...
Flutter笔记:电商中文货币显示插件Money Display
Flutter笔记 电商中文货币显示插件 Money Display 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/article/details/1338…...
腾讯云上创建 对象存储cos
1. 登录腾讯云, 找到对象存储cos 2. 创建存储桶 3. 获取4个配置参数 桶名称 / 地域secretId / secretKey...
微信小程序生成海报
效果: js1: const cloudHelper = require(../../../helper/cloud_helper.js);async function config1({cover,title,desc,qr,bg = }) {var qr1 ="images/qr.png"var qr2 ="https://636c-cloud1-0gu29f2j63906b7e-1319556650.tcb.qcloud.la/activitycomm/setu…...
stm32学习笔记:EXIT中断
1、中断系统 中断系统是管理和执行中断的逻辑结构,外部中断是众多能产生中断的外设之一。 1.中断: 在主程序运行过程中,出现了特定的中断触发条件 (中断源,如对于外部中断来说可以是引脚发生了电平跳变,对于定时器来…...
css 块元素、行内元素、行内块元素相互转换
在HTML和CSS中,元素可以分为三类:块级元素(Block-level Elements)、内联元素(Inline Elements)和内联块级元素(Inline-block Elements)。 块级元素(Block-level Elements…...
【JUC】多线程基础概述
文章目录 1. 一锁二并三程2. 用户线程和守护线程 1. 一锁二并三程 一锁:synchronized 二并: 并发:一台处理器“同时”处理多个任务,同一时刻只有一个事件发生并行:多台处理器同时处理多个任务,同一时刻多个处理器分…...
Git 回退代码的两种方法对比
Git 回退代码版本 在项目的开发中,有时候还是会出现,一些误提交了一些代码,这时候就会想撤回提交的代码,在Git中有两种方法可以使用,现在通过对比方法比较这两种方法的区别,分别适用于哪些情况?…...
Avalonia常用小控件Charts
1.项目下载地址:https://gitee.com/confusedkitten/avalonia-demo 2.UI库Semi.Avalonia,项目地址 https://github.com/irihitech/Semi.Avalonia 3.Charts库,LiveChartsCore.SkiaSharpView.Avalonia,Nuget获取只有预览库&#x…...
【Hugging Face】管理 huggingface_hub 缓存系统
摘要 这篇文档介绍了Hugging Face Hub的缓存系统。该系统旨在提供一个中央缓存,以便不同版本的文件可以被下载和缓存。缓存系统将文件组织成模型、数据集和空间等不同的目录,每个目录包含特定类型的文件。系统确保如果文件已经下载并更新,除非明确要求,否则不会再次下载。…...
Python学习基础笔记六十六——对象的方法
我们已经学习到的对象类型: 整数类型的对象 字符串类型的对象 列表类型的对象 元组类型的对象 对象通常都有属于自己的方法(method) 调用对象的方法和调用函数差不多,只要在前面加上所属对象的一个点。 var1 [1, 2, 3,4, 5,…...
建立一个新的高阶数学教授模式,知其然,知其用,知其之所以然,知其所以然
1. 传统常用的模式 概念,性质,定理,定理证明,定理应用; 这个学习模式挺好的,但是定理证明过程往往很冗长,而且不易记忆,也就是说,即使推导了定理,初学者也记…...
AtCoder ABC324G 启发式合并
题意 传送门 AtCoder ABC324G Generate Arrays 题解 逆则操作顺序考虑,可以看作至多 n n n 个联通分量不断合并的过程,此时使用启发式合并,即规模较小的连通分量向规模较大的连通分量合并,以单个元素合并为基本运算࿰…...
SpringBootCMS漏洞复现分析
SpringBootCMS,极速开发,动态添加字段,自定义标签,动态创建数据库表并crud数据,数据库备份、还原,动态添加站点(多站点功能),一键生成模板代码,让您轻松打造自己的独立网站ÿ…...
iOS- flutter flavor 多环境Configurations配置
一、点击PROJECT的Runner,选择Info选项,在Configurations下方的号添加不同环境的配置,如下图: 二、选择TAGETS的Runner项目,选择Build Settings选项,在输入框输入package,为不同环境配置相应的…...
【PyTorchTensorBoard实战】GPU与CPU的计算速度对比(附代码)
0. 前言 按照国际惯例,首先声明:本文只是我自己学习的理解,虽然参考了他人的宝贵见解,但是内容可能存在不准确的地方。如果发现文中错误,希望批评指正,共同进步。 本文基于PyTorch通过tensor点积所需要的时…...
npm 常用指令总结
1. 初始化包 一个存放了代码的文件夹,如果里面有 package.json 文件,则可以把这个文件夹称之为包。 npm init -y 注意: 由于包名不能有中文,不能有大写,不能和未来要下载的包重名. 所以我们快速初始化包时,我们的文件夹也不能违反前面说的规则.(因为默认会将文件夹的名称,作…...
布朗大学发现GPT-4存在新问题,可通过非常见语言绕过限制
🦉 AI新闻 🚀 布朗大学发现GPT-4存在新漏洞,可通过非常见语言绕过限制 摘要:布朗大学计算机科学研究人员发现了OpenAI的GPT-4存在新漏洞,利用不太常见的语言如祖鲁语和盖尔语可以绕过各种限制。研究人员测试了GPT-4对…...
ESP32网络编程-TCP客户端数据传输
TCP客户端数据传输 文章目录 TCP客户端数据传输1、IP/TCP简单介绍2、软件准备3、硬件准备4、TCP客户端实现本文将详细介绍在Arduino开发环境中,实现一个ESP32 TCP客户端,从而达到与TCP服务器数据交换的目标。 1、IP/TCP简单介绍 Internet 协议(IP)是 Internet 的地址系统,…...
免费开源神器OpenMS:质谱数据分析的完整解决方案
免费开源神器OpenMS:质谱数据分析的完整解决方案 【免费下载链接】OpenMS The codebase of the OpenMS project 项目地址: https://gitcode.com/gh_mirrors/op/OpenMS 你是否正在寻找一款强大的开源工具来处理复杂的质谱数据?OpenMS正是你需要的质…...
[TI板]MSPM0G3507开发全攻略:从环境搭建到实战应用
1. 环境配置:从零搭建MSPM0G3507开发环境 第一次接触TI的MSPM0G3507开发板时,最头疼的就是环境搭建。我花了整整两天时间踩遍了所有坑,现在把最顺滑的配置流程分享给你。这个芯片支持Keil、IAR和CCS三大主流IDE,但实测下来Keil的兼…...
DeepSeek-OCR-2应用实战:快速提取发票信息,财务效率翻倍
DeepSeek-OCR-2应用实战:快速提取发票信息,财务效率翻倍 1. 财务人的痛点:发票处理的效率黑洞 每个月末,财务部门总要面对这样的场景: 堆积如山的纸质发票需要手工录入电子发票PDF需要逐个打开复制粘贴关键信息&…...
低成本自动化方案:OpenClaw+自部署千问3.5-27B替代ChatGPT API调用
低成本自动化方案:OpenClaw自部署千问3.5-27B替代ChatGPT API调用 1. 为什么选择本地模型OpenClaw组合 去年我用ChatGPT API开发自动化脚本时,发现一个致命问题:当任务需要连续调用多个API时(比如先搜索资料再整理成报告&#x…...
Ostrakon-VL终端惊艳效果:终端界面响应速度实测对比
Ostrakon-VL终端惊艳效果:终端界面响应速度实测对比 1. 像素特工终端效果展示 1.1 视觉设计亮点 Ostrakon-VL终端采用了独特的8-bit像素艺术风格,将传统零售场景中的图像识别任务转化为充满游戏感的"数据扫描任务"。这种设计不仅提升了用户…...
实战指南:基于快马平台快速开发并部署班级宠物园应用官方下载门户
最近学校想推广一个班级宠物园的教育应用,需要快速搭建一个官方下载页面。作为技术负责人,我尝试用InsCode(快马)平台来快速实现这个需求,整个过程比想象中顺利很多。 项目规划与结构设计 首先明确页面需要包含的几个核心模块:顶部…...
KubeSphere vs Kuboard:Kubernetes管理工具选型与实战对比
KubeSphere vs Kuboard:深度对比与选型指南 1. 开篇:为什么需要Kubernetes管理工具? 在云原生技术蓬勃发展的今天,Kubernetes已成为容器编排领域的事实标准。然而,原生Kubernetes Dashboard的功能相对基础,…...
AI专著生成新玩法!掌握这些工具,快速产出高质量专业专著
学术专著写作挑战与 AI 辅助工具介绍 学术专著的根本价值在于其内容的系统性与内部逻辑的完整性,但这往往是写作中的一个重大挑战。相较于期刊论文专注于某个特定问题,学术专著必须构建一个包括绪论、理论框架、核心研究、应用拓展,以及结论…...
XGantt:Vue3项目管理的终极可视化解决方案
XGantt:Vue3项目管理的终极可视化解决方案 【免费下载链接】gantt A powerful and flexible Gantt chart component library for developers, written in native JS Canvas. Supports TypeScript. 中文文档 项目地址: https://gitcode.com/gh_mirrors/gantt/gant…...
百度网盘提取码智能方案:从繁琐搜索到效率革命的技术跃迁
百度网盘提取码智能方案:从繁琐搜索到效率革命的技术跃迁 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 问题诊断:资源获取的现代困境 时间成本的指数级浪费 传统提取码查找流程涉及多平台切换、关键…...







