JavaEE企业级开发中常用的Stream流

介绍

在Java编程中,Stream流是Java 8引入的一个重要概念,它提供了一种新的处理集合的方式,可以更加简洁、高效地进行数据操作。Stream流支持各种常见的操作,比如过滤、映射、排序、聚合等,同时也支持并行处理,可以充分利用多核处理器的性能优势。

Stream流通常采用延迟执行的策略,即在调用流操作方法时,并不会立即执行,而是会生成一系列的中间操作对象,这些操作对象会按照声明的顺序组成一个流水线。只有在遇到终止操作时,才会触发实际的计算。中间操作可以是过滤、映射、排序等,而终止操作可以是收集结果、聚合操作等。这种流水线的设计可以将多个操作串联起来,形成一个完整的数据处理流程。

在底层实现上,Java的Stream流通常会使用迭代器、函数式接口、Lambda表达式等技术来实现各种操作。通过合理地利用这些技术,可以实现高效、灵活的数据处理流程。

Stream流和SQL之间有一些相似之处,这主要是因为它们都提供了一种声明式的方式来处理数据

另外他们俩的惰性求值 和 数据流水线 过滤操作都及其类似

使用

流水线

先得到流水线 把数据都放上面去

在利用Stream流中的API进行操作

用集合去调用stream()方法

获得流水线 并把集合里面的数据放到流水线上

链式编程

双列集合

数组

一堆零散数据

静态方法of细节

方法的形参是一个可变参数,可以传递一堆零散的数据,也可以传递数组

但是数组必须是引用数据类型

如果传递基本数据类型,是会把整个数组当做一个元素放到Stream里

我们要做的是把数据放到Stream流里

中间方法

过滤

stream流关闭后不可再使用

优先使用链式编程

获取前几个元素

跳过前几个元素

练习

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc=new Scanner(System.in);ArrayList<String>list=new ArrayList<>();Collections.addAll(list,"张无忌","周正若","赵敏","张强","张三丰","张翠山","张良","王二麻子","谢广坤");list.stream().skip(3).filter(s ->s.startsWith("张")).forEach(s -> System.out.println(s));//"张强","张三丰","张翠山","张良"}
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc=new Scanner(System.in);ArrayList<String>list=new ArrayList<>();Collections.addAll(list,"张无忌","周正若","赵敏","张强","张三丰","张翠山","张良","王二麻子","谢广坤");list.stream().skip(3).limit(4).forEach(s -> System.out.println(s));//"张强","张三丰","张翠山","张良"}
}

去重

合并

转换流里面的数据类型

map方法

当map方法执行完毕之后,流上的数据就变成了整数

所以在下面的forEach当中

s依次表示流里面的每一个数据

等价于

终结方法

流里面的最后一步

之后就不能再使用流里面的其他方法了

收集方法collect

收集流中的数据,放到集合中

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;public class Main {public static void main(String[] args) {ArrayList<String> list=new ArrayList<>();Collections.addAll(list,"张无忌-男-25","周正若-女-14","赵敏-女-13","张强-男-20");List<String> man=list.stream().filter(s ->"男".equals(s.split("-")[1])).collect(Collectors.toList());System.out.println(man);Set<String> woman=list.stream().filter(s ->"女".equals(s.split("-")[1])).collect(Collectors.toSet());}
}

搜集到HashSet集合里面时

会去掉重复的元素

收集使用了collect这个方法

当收集到Map双列集合里的时候

键和值的规则要分别书写

收集到Map集合中,键是不能重复的

不然就会报错

完整版

转化成lambda表达式

总结

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

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

相关文章

PDF文件转换为CAD的方法

有时候我们收到一个PDF格式的设计图纸&#xff0c;但还需要进行编辑或修改时&#xff0c;就必须先将PDF文件转换回CAD格式。分享两个将PDF转换回CAD的方法&#xff0c;一个用到在线网站&#xff0c;一个用到PC软件&#xff0c;大家根据情况选择就可以了。 ☞在线CAD网站转换 …

JAVA实验项目(二): 抽象类、接口的定义与使用

实验项目二 抽象类、接口的定义与使用 Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&…

解决el-upload组件上传文件403 Forbidden的问题

话不多说&#xff0c;上错误。网络显示&#xff1a; 控制台显示&#xff1a; 并且后端也没接收到任何的请求。 只需要把前端中的组件&#xff1a; action的路径修改为&#xff1a; 也就是不写前面的localhost&#xff0c;而是拼接上发送请求拼接的‘api’即可 可以看到&#x…

鸿蒙ArkUI开发:常用布局【相对布局】

相对布局&#xff08;RelativeContainer&#xff09; 相对布局可以让子元素指定兄弟元素或父容器作为锚点&#xff0c;基于锚点做位置布局必须为RelativeContainer及其子元素设置ID&#xff0c;用于指定锚点信息。未设置ID的子元素不会显示RelativeContainer ID为“__containe…

MM模块学习二 (供应商,物料后台相关配置)

公司代码配置 新建条目&#xff08;只是建了一个名字出来&#xff0c;后面很多表都是没有得&#xff09; 接下来定义公司代码&#xff1a; 公司代码复制完成&#xff08;后续修改交给财务顾问去做&#xff09; 复制工厂&#xff1a; 复制工厂完成&#xff1a; 修改复制过去的工…

如何创建和运营新版Facebook粉丝专页

在众多平台中&#xff0c;Facebook粉丝专页无疑是连接全球消费者、扩展品牌影响力的重要工具。如果你是初次接触Facebook粉丝专页&#xff0c;可能会感到有些迷茫——毕竟&#xff0c;只是听说过它的好处&#xff0c;却不知道如何开始。 Facebook粉丝专页不仅是一个分享产品信…

AI算法-高数5.2-线性代数-向量间的线性相关、无关定义和结论

宋浩老师课程&#xff1a;3.2 向量间的线性关系&#xff08;二&#xff09;_哔哩哔哩_bilibili 线性相关、不相关结论&#xff1a; 判断线性有关\无关&#xff0c;转化成方程组&#xff1a; 判断条件> 向量线性相关、无关的本质是&#xff1a;除0外能不能找到非0的数据。

Windows内核--Kernel API简析(3.1)

如果所有的内核提供的功能&#xff0c;内核提供进程/线程创建和终止&#xff0c;内存分配和释放&#xff0c;文件操作&#xff0c;网络功能&#xff0c;驱动程序加载和卸载等功能。这些API将在后面陆续介绍&#xff0c;如下先介绍Kernel提供的基础API(Kernel自身或Driver使用).…

二叉树——初解

二叉树 树树的概念树的性质 二叉树二叉树的概念二叉树的性质二叉树的实现方式数组构建左孩子右兄弟法构建指针构建 树 树的概念 在计算机科学中&#xff0c;树&#xff08;Tree&#xff09;是一种重要的非线性数据结构&#xff0c;它由若干节点&#xff08;Node&#xff09;组…

mysql行转列聚合一对多的结果集|GROUP_CONCAT函数的使用|TRIM()函数的使用

1.行转列的结果集 selectdistinct tari.id,tari.link as link3,(casewhen tac.status 4 then ba.create_timeelse nullend ) as secondEditTime,(casewhen tac.status 1 then ba.linkelse nullend) as link1,(casewhen tac.status 2 then ba.linkelse nullend) as link2,(c…

施耐德UPS上电不输出问题

UPS上电之后output一直是off状态 型号SURT8000XLI-CH/ SURT8000UXI-CHSURT10000XLI-CH/ SURT10000UXI-CH 需要检查电池包是否插好&#xff0c;一定要把旁边的两个螺丝拧下来&#xff0c;再插上去&#xff0c;最后再装好螺丝 如果已经开机设置了UPS需要重置恢复出厂设置&…