Stream 流对象的创建与各方法

Stream 流对象的创建与各方法


目录

1.0 Stream 流的说明

2.0 Stream 流对象的创建

        2.1 对于 Collection 系列集合创建 Stream 流对象的方式

       2.2 对于 Map 系列集合创建 Stream 流对象的方式

      2.3 对于数组创建 Stream 流对象的方式

3.0 Stream 流的中间方法

      3.1 Stream 流的 filter() 中间方法

     3.2 Stream 流的 sorted() 中间方法

  3.3 Stream 流的 limit(x) 中间方法

        3.4 Stream 流的 skip(x) 中间方法

   3.5 Stream 流的 map() 中间方法

        3.6 Stream 流的 distinct() 中间方法

    3.7 Stream 流的 concat() 中间方法

4.0 Stream 流的终结方法

    4.1 Stream 流的 forEach 终结方法

        4.2 Stream 流的 count() 终结方法

    4.3 Stream 流的 max() 或者 min() 终结方法

5.0 Stream 流的 collect() 收集方法


1.0 Stream 流的说明

        Stream(流)是一种数据处理的概念,它可以用来处理集合、数组或输入/输出等数据源的元素序列。流可以看作是一个从源到目标的元素序列,可以通过一系列连续的操作对其进行处理。流的操作可以分为两种类型:中间操作和终端操作。中间操作是对流进行处理并返回一个新的流,而终端操作是对流进行最终的处理并返回一个结果或副作用。

2.0 Stream 流对象的创建

        主要以数组、集合来创建 Stream 流对象。

        2.1 对于 Collection 系列集合创建 Stream 流对象的方式


        直接用集合对象.stream() 实例方法创建 Stream 流对象。

以代码的形式来具体介绍:

        // List 集合系列来创建 Stream 流对象List<String> list = new ArrayList<>();Collections.addAll(list,"张三","李四","王五","张麻子");Stream<String> stream = list.stream();// Set 集合系列来创建 Stream 流对象Set<String> set = new HashSet<>();Collections.addAll(set,"张三","李四","王五","张麻子");Stream<String> stream1 = set.stream();

       2.2 对于 Map 系列集合创建 Stream 流对象的方式

        具体来介绍两种方式:第一种方法;把键值对“封装”成一个整体。第二种方法;分别把集合中的键和值全部获取出来,单独放在各个集合中。

以代码的形式来具体介绍:

 // Map 集合系列来创建 Stream 流对象Map<String,Integer> m = new HashMap<>();m.put("张三",19);m.put("李四",28);m.put("王五",33);m.put("张麻子",22);//第一种方法:把键值对“封装”成一个整体Set<Map.Entry<String,Integer>> entries = m.entrySet();Stream<Map.Entry<String,Integer>> stream2 = entries.stream();//第二种方法:分别把集合中的键和值全部获取出来,单独放在系列集合中Set<String> k = m.keySet();Collection<Integer> v = m.values();Stream<String> stream3 = k.stream();Stream<Integer> stream4 = v.stream();

      2.3 对于数组创建 Stream 流对象的方式

        具体来介绍有两种方式来创建对象:第一种方法;用 Arrays.stream() 方法来创建。第二种方法;用 Stream.of() 方法来创建。

以代码的形式来具体介绍:

// 用数组来创建 Stream 流对象String[] strings = new String[]{"张三","李四","王五","张麻子"};//第一种方法:用 Arrays.stream() 方法来创建Stream<String> stream5 = Arrays.stream(strings);//第二种方法:用 Stream.of() 方法来创建Stream<String> stream6 = Stream.of(strings);

3.0 Stream 流的中间方法

        Stream 流的中间方法主要用于对流中的元素进行处理,返回一个新的流对象。这些中间方法可以组合使用,形成流水线式的处理流程,方便进行复杂的数据处理操作。

      3.1 Stream 流的 filter() 中间方法

        用于对流中的数据进行过滤。

        通过具体代码实现:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;public class StreamIntermediateMethod {public static void main(String[] args) {List<String> list = new ArrayList<>();Collections.addAll(list,"张三","李四","王五","张麻子");//对一下代码解读:首先用 stream() 得到了该集合的流,//然后用 filter() 用于对流中的数据进行过滤,也可以理解成筛选字符串中带有“张”的,返回新流,//该新流中都是含“张”的字符串,接着把流中的数据进行用 forEach() 方法进行遍历。/*list.stream().filter(s -> s.contains("张")).forEach(s-> System.out.println(s));*///对以上代码稍微简化,如以下:list.stream().filter(s -> s.contains("张")).forEach(System.out::println);}
}

运行结果如下:

     3.2 Stream 流的 sorted() 中间方法

        按照指定规则排序。

通过具体代码实现:

import java.util.ArrayList;
import java.util.List;public class StreamIntermediateMethod {public static void main(String[] args) {List<Student> list = new ArrayList<>();list.add(new Student("张三",19));list.add(new Student("李四",22));list.add(new Student("王五",17));list.add(new Student("张麻子",33));//解读以下代码:首先先利用 stream() 方法来获取该集合的流,然后用 sorted() 方法,由于是自定义类型的对象,//默认的 sorted() 方法是搞不定,所以需要重写方法,因此可以接入这个匿名内部类来重写内部的具体方法,//排完序之后会得到一个新的流,然后经过 forEach 方法来遍历该流中的数据。list.stream().sorted((o1, o2)-> o1.getAge() - o2.getAge()).forEach(s-> System.out.println(s));//以上代码话可以继续简化,效果是一样的System.out.println("--------------------------------------------------------------------");list.stream().sorted((o1, o2)-> o1.getAge() - o2.getAge()).forEach(System.out::println);}
}

运行结果如下:

  3.3 Stream 流的 limit(x) 中间方法

        获取前面 x 个元素。

通过具体代码实现:

import java.util.ArrayList;
import java.util.List;public class StreamIntermediateMethod {public static void main(String[] args) {List<Student> list = new ArrayList<>();list.add(new Student("张三",19));list.add(new Student("李四",22));list.add(new Student("王五",17));list.add(new Student("张麻子",33));//对一下代码进行解读:先获取该集合的流,然后用 limit(2) 中间方法,获取前面2个元素,//返回新流,接着对新流进行遍历输出元素list.stream().limit(2).forEach(System.out::println);}
}

运行结果如下:

        3.4 Stream 流的 skip(x) 中间方法

        跳过前面 x 个元素。

通过具体代码实现:

import java.util.ArrayList;
import java.util.List;public class StreamIntermediateMethod {public static void main(String[] args) {List<Student> list = new ArrayList<>();list.add(new Student("张三",19));list.add(new Student("李四",22));list.add(new Student("王五",17));list.add(new Student("张麻子",33));//对一下代码进行解读:先得到该集合的流,然后用 skip(2) 中间方法,跳过前面2个元素,//得到的新流中包含后面两个元素,然后就进行遍历了。list.stream().skip(2).forEach(System.out::println);}
}

运行结果如下:

   3.5 Stream 流的 map() 中间方法

        对元素进行加工,并返回对应的新流。(映射)

通过代码具体实现:

import java.util.ArrayList;
import java.util.List;public class StreamIntermediateMethod {public static void main(String[] args) {List<Student> list = new ArrayList<>();list.add(new Student("张三",19));list.add(new Student("李四",22));list.add(new Student("王五",17));list.add(new Student("张麻子",33));//解读以下代码: 先得到该集合的流,然后调用 map() 中间方法,//将对应的元素进行加工,简单的来说就是,将原先的元素加工成自己想要的形式,//以下就是将学生类对象加工成字符串,["张三",19] -> "张三",每一个元素都是一一对应、映射的。list.stream().map(s->s.getName()).forEach(System.out::println);}
}

运行结果如下:

        3.6 Stream 流的 distinct() 中间方法

        去除流中重复的元素。但是对于自定义类型的元素,默认的 distinct() 方法是不能完成去除重复的元素。希望内容一样就认为重复,这就需要重写 hashCode() 与 equals() 方法。

通过代码具体实现:

import java.util.ArrayList;
import java.util.List;public class StreamIntermediateMethod {public static void main(String[] args) {List<Student> list = new ArrayList<>();list.add(new Student("张三",19));list.add(new Student("李四",22));list.add(new Student("王五",17));list.add(new Student("张麻子",33));list.add(new Student("张三",19));//解读以下代码: 先获取该集合中的流,然后调用 distinct() 方法,但是该流中的元素是自定义,//所以希望内容一样就认为重复,这就需要重写 hashCode() 与 equals() 方法。//去重后,返回一个新流。list.stream().distinct().forEach(System.out::println);}
}

运行结果如下:

    3.7 Stream 流的 concat() 中间方法

        合并 a 和 b 两个流为一个流。

通过代码具体实现:


import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;public class StreamIntermediateMethod {public static void main(String[] args) {List<Student> list = new ArrayList<>();list.add(new Student("张三",19));list.add(new Student("李四",22));list.add(new Student("王五",17));list.add(new Student("张麻子",33));List<Student> list1 = new ArrayList<>();list1.add(new Student("李麻子",23));Stream<Student> stream = Stream.concat(list.stream(),list1.stream());stream.forEach(System.out::println);}
}

运行结果如下:

4.0 Stream 流的终结方法

        Stream 流的终结方法用于对流进行最终的处理并返回一个结果或副作用。对流进行最终的处理并获取结果。需要注意的是,终结方法只能对流进行一次操作,一旦流被消费,就不能再次使用。

    4.1 Stream 流的 forEach 终结方法

        对此流运算后的元素执行后遍历。

通过代码具体实现:

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;public class StreamIntermediateMethod {public static void main(String[] args) {List<Student> list = new ArrayList<>();list.add(new Student("张三",19));list.add(new Student("李四",22));list.add(new Student("王五",17));list.add(new Student("张麻子",33));List<Student> list1 = new ArrayList<>();list1.add(new Student("李麻子",23));Stream.concat(list.stream(),list1.stream()).forEach(System.out::println);}
}

运行结果如下:

        4.2 Stream 流的 count() 终结方法

        统计此流运算后的元素个数。需要注意的是:返回值是 long 类型。

通过代码具体实现:

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;public class StreamIntermediateMethod {public static void main(String[] args) {List<Student> list = new ArrayList<>();list.add(new Student("张三",19));list.add(new Student("李四",22));list.add(new Student("王五",17));list.add(new Student("张麻子",33));List<Student> list1 = new ArrayList<>();list1.add(new Student("李麻子",23));System.out.println(Stream.concat(list.stream(), list1.stream()).count());}
}

运行结果如下:

    4.3 Stream 流的 max() 或者 min() 终结方法

        获取此流运算后的最大值或者最小值元素。但是对于自定义的类型,默认的 max() 方法是不能获取此流的最大值元素,默认的 min() 方法是不能获取此流的最小值元素,会报异常,此时就需要用到比较器了。

通过代码具体实现:

import java.util.ArrayList;
import java.util.List;public class StreamIntermediateMethod {public static void main(String[] args) {List<Student> list = new ArrayList<>();list.add(new Student("张三", 19));list.add(new Student("李四", 22));list.add(new Student("王五", 17));list.add(new Student("张麻子", 33));Student s1 = list.stream().max((o1, o2) -> o1.getAge() - o2.getAge()).get();System.out.println("最大年龄为:"+s1.getAge());Student s2 = list.stream().min((o1, o2) -> o1.getAge() - o2.getAge()).get();System.out.println("最小年龄为:"+s2.getAge());}
}

运行结果如下:

5.0 Stream 流的 collect() 收集方法

        把流处理后的结果收集到一个指定的集合中去。

通过代码具体实现:

一. 收集到 list 系列集合中

import java.util.stream.Collectors;
import java.util.ArrayList;
import java.util.List;public class StreamIntermediateMethod {public static void main(String[] args) {List<Student> list = new ArrayList<>();list.add(new Student("张三", 19));list.add(new Student("李四", 22));list.add(new Student("王五", 17));list.add(new Student("张麻子", 33));//对以下代码进行解读:先得到该集合的流,再筛选开头为“张”的名字,得到一个新流,再收集到 List 系列集合中。List<Student> list1 =  list.stream().filter(s->s.getName().startsWith("张")).collect(Collectors.toList());System.out.println(list1);}
}

 实现List数组用逗号分隔开,转成字符串

List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");String str = list.stream().collect(Collectors.joining(","));System.out.println(str); //输出结果为 a,b,c,d

运行结果如下:

二.收集到 Set 系列集合中

import java.util.*;
import java.util.stream.Collectors;public class StreamIntermediateMethod {public static void main(String[] args) {List<Student> list = new ArrayList<>();list.add(new Student("张三", 19));list.add(new Student("李四", 22));list.add(new Student("王五", 17));list.add(new Student("张麻子", 33));//对一下代码进行解读: 先得到该集合的流,再进行筛选出年龄大于18的元素,// 最后再将这些集合中的元素收集到 Set 系列集合中。Set <Student> set = list.stream().filter(s->s.getAge() > 18).collect(Collectors.toSet());System.out.println(set);}
}

运行结果如下:

三.收集到 Map 系列集合中


import java.util.*;
import java.util.stream.Collectors;public class StreamIntermediateMethod {public static void main(String[] args) {List<Student> list = new ArrayList<>();list.add(new Student("张三", 19));list.add(new Student("李四", 22));list.add(new Student("王五", 17));list.add(new Student("张麻子", 33));Map<String,Integer> map = list.stream().collect(Collectors.toMap(s-> s.getName(), s-> s.getAge()));System.out.println(map);}
}

运行结果如下:

四.收集到数组中

import java.util.*;public class StreamIntermediateMethod {public static void main(String[] args) {List<Student> list = new ArrayList<>();list.add(new Student("张三", 19));list.add(new Student("李四", 22));list.add(new Student("王五", 17));list.add(new Student("张麻子", 33));Student[] students = list.stream().toArray(s->new Student[s]);//以上代码简化为如下:Student[] students1 = list.stream().toArray(Student[]::new);System.out.println(Arrays.toString(students));System.out.println(Arrays.toString(students1));}
}

运行结果如下:

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习】四、计算学习理论

1 基础知识 计算学习理论&#xff08;computational learning theory&#xff09;&#xff1a;关于通过“计算”来进行“学习”的理论&#xff0c;即关于机器学习的理论基础&#xff0c;其目的是分析学习任务的困难本质&#xff0c;为学习算法体统理论保证&#xff0c;并根据结…

【进程控制⑦】:制作简易shell理解shell运行原理

【进程控制⑦】&#xff1a;制作简易shell&&理解shell运行原理 一.交互问题&#xff0c;获取命令行二.字串分割问题&#xff0c;解析命令行三.指令的判断四.普通命令的执行五.shell原理本质 一.交互问题&#xff0c;获取命令行 shell刚启动时就会出现一行命令行&#x…

Jenkins自动化部署简单配置

下载安装jenkins 安装Jenkins步骤 点击Next的时候会有jdk版本跟Jenkins版本不符合的情况 1. 看下任务管理器内Jenkins服务是否启动&#xff0c;在浏览器里面输入localhost:2023&#xff08;端口号是安装时输入的&#xff09; 2. 根据路径找到放置密码的文件&#xff08;C…

第17期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练 Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大型语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以…

.NET Core 中插件式开发实现

在 .NET Framework 中&#xff0c;通过AppDomain实现动态加载和卸载程序集的效果&#xff1b;但是.NET Core 仅支持单个默认应用域&#xff0c;那么在.NET Core中如何实现【插件式】开发呢&#xff1f; 一、.NET Core 中 AssemblyLoadContext的使用 1、AssemblyLoadContext简…

免费记课时小程序-全优学堂

1. 教师使用小程序记上课 使用步骤 创建了员工账号&#xff0c;员工需设置为教师为班级进行排课使用系统账号绑定小程序&#xff0c;记上课 #1.1 创建员工账号 通过系统菜单’机构设置->员工管理‘&#xff0c;添加本机构教师及其他员工。 添加过程中&#xff0c;可设置…

【计算机网络】同源策略及跨域问题

1. 同源策略 同源策略是一套浏览器安全机制&#xff0c;当一个源的文档和脚本&#xff0c;与另一个源的资源进行通信时&#xff0c;同源策略就会对这个通信做出不同程度的限制。 同源策略对 同源资源 放行&#xff0c;对 异源资源 限制。因此限制造成的开发问题&#xff0c;称…

MyBatis无法读取XML中的Method的乌龙事件

事件背景 同事反馈&#xff0c;相同的jar包&#xff0c;在多人本地的电脑、多台服务器中&#xff0c;都是可以正常启动的&#xff0c;只有在其中一台服务器&#xff0c;简称它为A&#xff0c;无法启动&#xff0c;因为启动后的初始化操作中有一个调用mybatis方法的操作&#x…

oracle如果不适用toad或者plsql工具如何获取索引建表语句

select dbms_lob.substr(dbms_metadata.get_ddl(INDEX,INDEX_NAME,DIXON))||; from dba_indexes where ownerDIXON这个语句可以获取dixon用户的所有索引创建语句&#xff0c;sql脚本形式呈现 点开一个语句查看 如果不使用dbms_lob.substr这个函数最后得到是一个clob selec…

英国 AI 安全峰会前瞻:为什么是现在,为什么在英国

撰文&#xff1a;Ingrid Lunden 来源&#xff1a;TechCrunch 图片来源&#xff1a;由无界AI生成 人工智能的前景和危害是如今的热门话题。有人说人工智能将拯救我们&#xff0c;可以帮助诊断一些恶性疾病、弥补教育领域的数字鸿沟等。但也有人担心它在战争、安全、错误信息等方…

[学习笔记]python绘制图中图(绘制站点分布图)

背景 在绘制站点分布图时&#xff0c;有时需要采用图中图的方式&#xff0c;以便于在一张图中尽可能多的表达信息。此处记录一下利用python matplotlib绘制图中图的脚本&#xff0c;方便然后查询。 包含数据 该绘图脚本中包含以下数据&#xff1a; CMONOC站点分布&#xff…

Linux解决nvcc -V出现的-bash: nvcc command not found问题

两种解决办法&#xff1a; 1、第一种直接在bashrc文件中添加本地cuda路径&#xff1a; vim ~/.bashrc 定位到内容末尾&#xff0c;最末尾 添加命令&#xff1a; export LD_LIBRARY_PATH/usr/local/cuda/lib export PATH$PATH:/usr/local/cuda/bin添加后激活 source ~/.bashrc…

AI开源 - LangChain UI 之 Flowise

原文&#xff1a;AI开源 - LangChain UI 之 Flowise 一、Flowise 简介 Flowise 是一个为 LangChain 设计的用户界面(UI)&#xff0c;使得使用 LangChain 变得更加容易&#xff08;低代码模式&#xff09;。 通过拖拽可视化的组件&#xff0c;组建工作流&#xff0c;就可以轻…

写出优美的代码:考虑使用静态工厂方法替代构造方法

文章目录 一、静态工厂方法区别于工厂方法模式二、静态工厂方法的优点1、有名字&#xff08;1&#xff09;优势&#xff08;2&#xff09;源码分析&#xff1a;BigInteger&#xff08;3&#xff09;源码分析&#xff1a;Executors&#xff08;4&#xff09;常用命名 名称 2、不…

苹果cms论坛多播放源自动采集在线影视网站

苹果 cms 论坛一个基于 vue 和 gin 实现的在线观影网站 项目采用 vite vue 作为前端技术栈, 使用 ElementPlus 作为 UI 框架进行开发 后端程序使用 Gin gorm go-redis 等相关框架提供接口服务, 使用 gocolly 和 robfig/cron 进行公共影视资源采集和定时更新功能 目前用户…

目前比较好用的护眼台灯?最好用的五款护眼台灯推荐

灯具可以说是我们日常生活中使用很频繁的工具了&#xff0c;我们每天都离不开它给我们带来的光亮。当然&#xff0c;现在灯具也有很多种类可以挑选&#xff0c;今天主要带来五款非常好用的护眼台灯指南。 1.书客护眼台灯Pro 使用体验分数&#xff1a;10分 亮点&#xff1a;具…

笔记:IDEA如何修改代码后,不重启服务器局部更新资源

前言 平常用IDEA开发网页写调样式和测功能最讨厌改一丁点东西就要重启整个服务器&#xff0c;所以本文主要就是解决此问题从而提高开发效率&#xff0c;避免浪费过多时间。 具体步骤 1、打开设置框 2、先新增exploded结尾的&#xff0c;并apply应用&#xff0c;把没有结尾的…

ch0_OSI 七层网络协议介绍

目录 概述 1、三网融合的概念 三网&#xff1a;电信网络、有线电视网络、计算机网络 概念&#xff1a;把上述三种网络融合成一种网络 2、计算机网络的定义、分类 定义&#xff1a;计算机网络是将地理位置不同的独立计算机系统&#xff0c;通过传输介质链接起来&#xff0c…

HTML样式CSS、图像

HTML样式-CSS: CSS (Cascading Style Sheets) 用于渲染HTML元素标签的样式。CSS可以通过以下方式添加到HTML中&#xff1a;1&#xff09;、内联方式&#xff1a;在HTML元素中使用“style”属性&#xff1b;2&#xff09;、内部样式表&#xff1a;在HTML文档头部<head>区…

阿里云OS系统Alibaba Cloud Linux 3系统的安全更新命令

给客户部署的服务&#xff0c;进入运维阶段&#xff0c;但是经常被客户监测到服务器漏洞&#xff0c;现在整理一下&#xff0c;服务器漏洞问题更新命令步骤。 服务器系统&#xff1a; 阿里云linux服务器&#xff1a;Alibaba Cloud Linux 3 漏洞类型和描述&#xff1a; #3214…