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

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接口是一个 消费型 的函数式接口&#xff0c;可以传递Lambda表达式&#xff0c;消费数据用来遍历流中的数据&#xff0c;是一个 终结 方法&#xff0c;遍历 之后就不能继续调用Stream流中的其他方法 package com.csdn.stream; import jav…...

2023大联盟2比赛总结

比赛链接 反思 T1 奇怪的贪心和构造题一直是我的软肋部分 T2 简单题 T3 也不难 T4 套路没学过&#xff0c;感觉还是太菜了 题解 A 考虑先给图随便染色&#xff0c;然后调整 因为每个点的度数为 3 3 3&#xff0c;所以如果有 x → u → v x\to u\to v x→u→v 的颜…...

Flutter笔记:电商中文货币显示插件Money Display

Flutter笔记 电商中文货币显示插件 Money Display 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;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、中断系统 中断系统是管理和执行中断的逻辑结构&#xff0c;外部中断是众多能产生中断的外设之一。 1.中断&#xff1a; 在主程序运行过程中&#xff0c;出现了特定的中断触发条件 (中断源&#xff0c;如对于外部中断来说可以是引脚发生了电平跳变&#xff0c;对于定时器来…...

css 块元素、行内元素、行内块元素相互转换

在HTML和CSS中&#xff0c;元素可以分为三类&#xff1a;块级元素&#xff08;Block-level Elements&#xff09;、内联元素&#xff08;Inline Elements&#xff09;和内联块级元素&#xff08;Inline-block Elements&#xff09;。 块级元素&#xff08;Block-level Elements…...

【JUC】多线程基础概述

文章目录 1. 一锁二并三程2. 用户线程和守护线程 1. 一锁二并三程 一锁&#xff1a;synchronized 二并: 并发&#xff1a;一台处理器“同时”处理多个任务&#xff0c;同一时刻只有一个事件发生并行&#xff1a;多台处理器同时处理多个任务&#xff0c;同一时刻多个处理器分…...

Git 回退代码的两种方法对比

Git 回退代码版本 在项目的开发中&#xff0c;有时候还是会出现&#xff0c;一些误提交了一些代码&#xff0c;这时候就会想撤回提交的代码&#xff0c;在Git中有两种方法可以使用&#xff0c;现在通过对比方法比较这两种方法的区别&#xff0c;分别适用于哪些情况&#xff1f…...

Avalonia常用小控件Charts

1.项目下载地址&#xff1a;https://gitee.com/confusedkitten/avalonia-demo 2.UI库Semi.Avalonia&#xff0c;项目地址 https://github.com/irihitech/Semi.Avalonia 3.Charts库&#xff0c;LiveChartsCore.SkiaSharpView.Avalonia&#xff0c;Nuget获取只有预览库&#x…...

【Hugging Face】管理 huggingface_hub 缓存系统

摘要 这篇文档介绍了Hugging Face Hub的缓存系统。该系统旨在提供一个中央缓存,以便不同版本的文件可以被下载和缓存。缓存系统将文件组织成模型、数据集和空间等不同的目录,每个目录包含特定类型的文件。系统确保如果文件已经下载并更新,除非明确要求,否则不会再次下载。…...

Python学习基础笔记六十六——对象的方法

我们已经学习到的对象类型&#xff1a; 整数类型的对象 字符串类型的对象 列表类型的对象 元组类型的对象 对象通常都有属于自己的方法&#xff08;method&#xff09; 调用对象的方法和调用函数差不多&#xff0c;只要在前面加上所属对象的一个点。 var1 [1, 2, 3,4, 5,…...

建立一个新的高阶数学教授模式,知其然,知其用,知其之所以然,知其所以然

1. 传统常用的模式 概念&#xff0c;性质&#xff0c;定理&#xff0c;定理证明&#xff0c;定理应用&#xff1b; 这个学习模式挺好的&#xff0c;但是定理证明过程往往很冗长&#xff0c;而且不易记忆&#xff0c;也就是说&#xff0c;即使推导了定理&#xff0c;初学者也记…...

AtCoder ABC324G 启发式合并

题意 传送门 AtCoder ABC324G Generate Arrays 题解 逆则操作顺序考虑&#xff0c;可以看作至多 n n n 个联通分量不断合并的过程&#xff0c;此时使用启发式合并&#xff0c;即规模较小的连通分量向规模较大的连通分量合并&#xff0c;以单个元素合并为基本运算&#xff0…...

SpringBootCMS漏洞复现分析

SpringBootCMS&#xff0c;极速开发&#xff0c;动态添加字段&#xff0c;自定义标签&#xff0c;动态创建数据库表并crud数据&#xff0c;数据库备份、还原&#xff0c;动态添加站点(多站点功能)&#xff0c;一键生成模板代码&#xff0c;让您轻松打造自己的独立网站&#xff…...

iOS- flutter flavor 多环境Configurations配置

一、点击PROJECT的Runner&#xff0c;选择Info选项&#xff0c;在Configurations下方的号添加不同环境的配置&#xff0c;如下图&#xff1a; 二、选择TAGETS的Runner项目&#xff0c;选择Build Settings选项&#xff0c;在输入框输入package&#xff0c;为不同环境配置相应的…...

【PyTorchTensorBoard实战】GPU与CPU的计算速度对比(附代码)

0. 前言 按照国际惯例&#xff0c;首先声明&#xff1a;本文只是我自己学习的理解&#xff0c;虽然参考了他人的宝贵见解&#xff0c;但是内容可能存在不准确的地方。如果发现文中错误&#xff0c;希望批评指正&#xff0c;共同进步。 本文基于PyTorch通过tensor点积所需要的时…...

npm 常用指令总结

1. 初始化包 一个存放了代码的文件夹,如果里面有 package.json 文件,则可以把这个文件夹称之为包。 npm init -y 注意: 由于包名不能有中文,不能有大写,不能和未来要下载的包重名. 所以我们快速初始化包时,我们的文件夹也不能违反前面说的规则.(因为默认会将文件夹的名称,作…...

布朗大学发现GPT-4存在新问题,可通过非常见语言绕过限制

&#x1f989; AI新闻 &#x1f680; 布朗大学发现GPT-4存在新漏洞&#xff0c;可通过非常见语言绕过限制 摘要&#xff1a;布朗大学计算机科学研究人员发现了OpenAI的GPT-4存在新漏洞&#xff0c;利用不太常见的语言如祖鲁语和盖尔语可以绕过各种限制。研究人员测试了GPT-4对…...

ESP32网络编程-TCP客户端数据传输

TCP客户端数据传输 文章目录 TCP客户端数据传输1、IP/TCP简单介绍2、软件准备3、硬件准备4、TCP客户端实现本文将详细介绍在Arduino开发环境中,实现一个ESP32 TCP客户端,从而达到与TCP服务器数据交换的目标。 1、IP/TCP简单介绍 Internet 协议(IP)是 Internet 的地址系统,…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

C++实现分布式网络通信框架RPC(2)——rpc发布端

有了上篇文章的项目的基本知识的了解&#xff0c;现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...

负载均衡器》》LVS、Nginx、HAproxy 区别

虚拟主机 先4&#xff0c;后7...

如何做好一份技术文档?从规划到实践的完整指南

如何做好一份技术文档&#xff1f;从规划到实践的完整指南 &#x1f31f; 嗨&#xff0c;我是IRpickstars&#xff01; &#x1f30c; 总有一行代码&#xff0c;能点亮万千星辰。 &#x1f50d; 在技术的宇宙中&#xff0c;我愿做永不停歇的探索者。 ✨ 用代码丈量世界&…...