Stream流中的常用方法(forEach,filter,map,count,limit,skip,concat)和Stream流的特点

news2025/1/11 6:02:48

 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 closed
	at 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);// 喜羊羊 美羊羊 懒洋洋 灰太狼 红太狼 张三丰 张翠山 张无忌 赵敏 周芷若
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1092922.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数字IC设计】DC自动添加门控时钟

简介 数字电路的动态功耗主要是由于寄存器翻转带来的&#xff0c;为了降低芯片内部功耗&#xff0c;门控时钟的方案应运而生。作为低功耗设计的一种方法&#xff0c;门控时钟是指在数据无效时将寄存器的时钟关闭&#xff0c;以此来降低动态功耗。 在下图中&#xff0c;展示了…

【Matlab】二维绘图函数汇总

目录 1. plot() 2. subplot() 3. fplot() 4. polarplot() 1. plot() plot() 函数是 Matlab 中最常用的绘图函数&#xff0c;用于在平面直角坐标系中绘制直线或曲线。 用法&#xff1a; plot(X,Y) plot(X,Y,LineSpec) plot(X1,Y1, ... ,Xn,Yn) 说明&#xff1a; plot(X,Y) …

【软考-中级】系统集成项目管理工程师-立项管理历年案例

持续更新。。。。。。。。。。。。。。。 目录 2023 上 试题一(18分) 2023 上 试题一(18分) A公司跨国收购了B公司的主营业务&#xff0c;保留了B公司原有的人员组织结构和内部办公系统。 为了解决B公司内部办公系统与A公司原有系统不兼容的问题&#xff0c;财务、人力和行政部…

ES6 -- 模块化(CommonJS、AMD、ES Module)

模块模式 将代码拆分成独立的块&#xff0c;然后再将这些块连接起来可以通过模块模式来实现。这种模式背后的思想很简单&#xff1a;把逻辑分块&#xff0c;各自封装&#xff0c;相互独立&#xff0c;每个块自行决定对外暴露什么&#xff0c;同时自行决定引入执行哪些外部代码…

springboot 制造装备物联及生产管理ERP系统

springboot 制造装备物联及生产管理ERP系统 liu1113625581

什么是js?(初步了解)

Javascript简称js,js是一种脚本语言,是不需要进行编译的,也是浏览器中的一部分,经常用在web客户端脚本语言,主要是用来给html增加动态功能。 而现在&#xff0c;由于Node.js的出现&#xff0c;JavaScript以及不局限与浏览器&#xff0c;用户也可以在服务端进行代码的编写&#…

gpt4.0和3.5区别在哪里:什么样的人适合使用gpt4.0?

GPT-4和GPT-3.5相比&#xff0c;就像是智能手机的新一代和上一代。升级了&#xff0c;功能多了&#xff0c;但核心都是让你的工作和生活更便捷。 联网能力 GPT-3.5&#xff1a;与世隔绝&#xff0c;不联网。 GPT-4&#xff1a;5月17日后能上网浏览&#xff0c;信息获取能力加…

Zabbix7.0 LTS新功能

一、简介 LTS是长期支持。LTS版本支持5年。如果更喜欢稳定性&#xff0c;未涉及到最新的功能&#xff0c;可以选次新的LTS或者更低解决方案。而Zabbix6.4是最新的主要版本不属于LTS版本。 二、新功能 从以下几个方面介绍部分新功能&#xff1a; 性能提升&#xff1a;内存储存…

二十四、【参考素描三大面和五大调】

文章目录 三种色面(黑白灰)五种色调 这个可以参考素描对物体受光的理解&#xff1a;素描调子的基本规律与素描三大面五大调物体的明暗规律 三种色面(黑白灰) 如下图所示&#xff0c;我们可以看到光源是从亮面所对应的方向射过来的,所以我们去分析图形的时候&#xff0c;首先要…

SpringMVC之WEB-INF下页面跳转@ModelAttributeIDEA tomcat控制台中文乱码问题处理

WEB-INF下页面跳转 ModelAttribute来注解非请求处理方法 用途&#xff1a;预加载数据&#xff0c;会在每个RequestMapping方法执行之前调用。 特点&#xff1a;无需返回视图&#xff0c;返回类型void IDEA tomcat控制台中文乱码问题处理 复制此段代码&#xff1a;-Dfile.e…

Fooocus AI绘画多种风格阿弥陀佛像

ai绘画越来越简单了&#xff0c;fooocus就是最近比较多人议论的一个stable diffusion 变种&#xff0c;由control net 作者针对 标midJourney的一款同类开源绘画工具。作为工具开发来说&#xff0c;肯定是越简单&#xff0c;用户越多。当然&#xff0c;模型用的还是SD官方模型。…

【运算符+逻辑控制】

文章目录 1.类型转换2.类型提升3.如何求字符串长度 4.字符串类型String的神奇用法 4.运算符算术运算符关系运算符逻辑运算符 5.位运算符移位运算符条件运算符6.java的输入7. 判断是否为闰年8.switch 语句9.while循环计算1~100之间的和计算1~100之间的奇数的和计算1~100之间偶数…

如何在小程序的个人中心页面进行装修

个人中心页面是小程序中非常重要的页面之一&#xff0c;它是用户与小程序进行互动和管理的主要入口。为了提升用户体验和个性化定制&#xff0c;商家可以对个人中心页面进行装修&#xff0c;包括设置顶部的背景图片和标题图片、我的服务项目等等。 下图&#xff0c;是小程序个人…

顺序表之(条条有注释助你吃透顺序表以及基于顺序表实现的通讯录)

顺序表 顺序表是线性表的一种&#xff0c;而线性表指的是具有相同特性的一类数据结构的统称&#xff0c;这些相同特性即在逻辑结构&#xff08;人为想象&#xff09;上一定是线性的&#xff0c;在物理结构&#xff08;内存存储中&#xff09;上不一定是线性的 顺序表的底层结构…

Java应用的防破解方案

前言 自从Java诞生以来&#xff0c;其字节码容易被反编译的问题就为程序员所诟病。由此也诞生了不少Java混淆工具和加壳软件。 Java应用的打包 exe4jlaunch4jJSmooth: 已经过时了jpackage&#xff1a;JDK自带的打包工具Installer工具&#xff1a;Inno Setup、NSIS(https://s…

Redis 最流行的图形化界面下载及使用超详细教程(带安装包)! redis windows客户端下载

另一个完全不同的redis图形化界面教程链接&#xff08;带安装包&#xff09;&#xff1a; https://blog.csdn.net/dream_ready/article/details/133817466 redis图形化界面的压缩包&#xff0c;直接解压缩即可&#xff0c;双击 Another Redis Desktop Manager.exe 即可打开 1、…

数据结构--》掌握数据结构中的查找算法

当你需要从大量数据中查找某个元素时&#xff0c;查找算法就变得非常重要。 无论你是初学者还是进阶者&#xff0c;本文将为你提供简单易懂、实用可行的知识点&#xff0c;帮助你更好地掌握查找在数据结构和算法中的重要性&#xff0c;进而提升算法解题的能力。接下来让我们开启…

IDEA中SpringBoot的启动类文件变成了一个J文件的解决方案

错误如下&#xff1a; 解决方案&#xff1a; 此时可以发现已经恢复成功了

使用Python进行钻石价格分析

钻石是最昂贵的宝石之一。钻石的质量通常以其重量&#xff08;克拉&#xff09;、净度、颜色和切工来评估。重量越大、净度越高、色彩纯净、切工精细的钻石价格也越高。其中&#xff0c;4C标准是衡量钻石质量的国际标准&#xff0c;即克拉&#xff08;Carat&#xff09;、净度&…

java中将数组转换成字符串

方法1&#xff1a;使用StringBuilder拼接 基本类型和引用类型兼容 int[] arr {1,2,4,6,9};StringBuilder sb new StringBuilder();for (int i 0; i < arr.length ; i) {if (i!arr.length-1){sb.append(arr[i]",");}else {sb.append(arr[i]);}}System.out.prin…