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.mzph.cn/bicheng/9296.shtml

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

相关文章

SAP供应商预付款业务

业务理解&#xff1a; 预付账款是企业向供应商预付的款项 应付账款是企业尚未支付的款项。 两者区别&#xff1a; 预付账款属于企业的资产&#xff0c;应计入预付账款科目中&#xff0c;而应付账款属于企业的负债&#xff0c;应计入应付账款科目中。应付账款是提前支付的…

macOS 如何使用Visual Studio Code 编译C++

在 macOS,则默认系统 C++ 编译器是 Clang。 要使用 Visual Studio Code 在 macOS 上的 Clang 中指定 C++ 版本,可以按如下所示修改tasks.json 文件: 在 Visual Studio Code 中打开您的 C++ 项目。按 Ctrl+Shift+P(或 macOS 上的 Cmd+Shift+P)打开命令面板。在命令面板中键…

自学错误合集--MessageSource国际化接口

java后端自学错误总结 一.MessageSource国际化接口总结 一.MessageSource国际化接口 今天第一次使用MessageSource接口,比较意外遇到了一些坑 messageSource是spring中的转换消息接口&#xff0c;提供了国际化信息的能力。MessageSource用于解析 消息&#xff0c;并支持消息的…

字节、进制、字符串格式化

文章目录 1.字节2.不同的进制之间转换数值3.bytes()用法4.struct.unpack()用法5.字符串格式化{:03.2f} 1.字节 字节&#xff08;Byte&#xff09;是计算机存储和处理数据的基本单位之一。一个字节可以存储8个二进制位&#xff08;bit&#xff09;&#xff0c;每个二进制位可以…

【Android】使用Handler实现一个定时器

需求 实现一个定时任务&#xff0c;每隔一秒执行一次 实现 使用Handler实现 private Handler topUIHandler;private void initTopUiHandler() {topUIHandler new Handler(getMainLooper()) {Overridepublic void handleMessage(Message msg) {//执行这个定时任务updateTop…

软件项目管理期末复习题8-16章

第八章软件项目质量计划 一、填空题 1、&#xff08;审计&#xff09;是对过程或产品的一次独立质量评估。 2、质量成本包括预防成本和&#xff08;缺陷成本&#xff09;。 3、&#xff08;软件质量&#xff09;是软件满足明确说明或者隐含的需求的程度。 5、McCall质量模…

【华为】IPSec VPN手动配置

【华为】IPSec VPN手动配置 拓扑配置ISP - 2AR1NAT - Easy IPIPSec VPN AR3NATIPsec VPN PC检验 配置文档AR1AR2 拓扑 配置 配置步骤 1、配置IP地址&#xff0c;ISP 路由器用 Lo0 模拟互联网 2、漳州和福州两个出口路由器配置默认路由指向ISP路由器 3、进行 IPsec VPN配置&…

数据的输入和输出

早期的总线系统 为了解决通信的问题、主板上铺设了一条公共线路、各个设备都连接到这条线路上、不管谁要和谁通信、都能使用它来传输、这条线路就是总线。 总线上有CPU、内存、鼠标、键盘、硬盘、网卡、声卡、显卡等… 说是一条总线、实际上是包含了传输数据的数据总线、传输…

场景文本检测识别学习 day09(Swin Transformer论文精读)

Swin Transformer Swin Transformer 提出ViT具有两个缺点&#xff1a; 1. 没有多尺度特征 &#xff0c;不能生成多尺度的特征图传给FPN (检测) \ U-Net (分割)&#xff0c;从而对于不同大小的物体都能进行良好感知&#xff0c;即只有16 * 16的patch尺寸 2. 全局计算自注意力浪…

智密腾讯云直播组建--准备腾讯云环境

在准备接入之前&#xff0c;开发者需要自行准备腾讯云方面以及uniapp方面所需的资料&#xff0c;申请对应的服务与应用数据&#xff0c;本篇将教您如何从0开始完成腾讯云环境准备全部步骤所需资料 本服务依赖于腾讯云云服务&#xff0c;从而为直播间提供业务支持。通过腾讯多个…

js 关于数组排序的方法

在JavaScript中&#xff0c;数组排序主要有两种主要方法&#xff1a;Array.prototype.sort() 和自定义排序函数。 Array.prototype.sort() sort() 方法按照字符串Unicode码点顺序对数组元素进行排序&#xff0c;并返回数组。对于非字符串类型的数组元素&#xff0c;sort() 方…

springcloud第4季 springcloud-alibaba之sentinel2

一 sentinel实操实例 1.1 sentinel作用 sentinel是面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;主要以流量为切入点&#xff0c;从流量路由、流量控制、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障服务的稳定性。

使用Java动态创建Flowable会签模型

theme: channing-cyan 在企业级应用开发中&#xff0c;工作流管理系统如Flowable扮演着至关重要的角色&#xff0c;特别是在自动化业务流程、任务分配和审批流程设计上。动态创建流程模型&#xff0c;尤其是会签&#xff08;Parallel Gateway&#xff09;模型&#xff0c;是提…

大模型LLM:最清晰解读提示工程(Prompt Engineering)

提示工程&#xff08;Prompt Engineering&#xff09;&#xff0c;也称为上下文提示&#xff0c;是一种通过不更新模型的权重/参数来引导LLM行为朝着特定结果的方法。这是与AI有效交流所需结果的过程。提示工程可以用于各种任务&#xff0c;从回答问题到算术推理乃至各种应用领…

【触摸案例-手势解锁案例-按钮高亮 Objective-C语言】

一、我们来说这个self.btns,这个问题啊,为什么不用_btns, 1.我们说,在懒加载里边儿,经常是写下划线啊,_btns,为什么不写,首先啊,这个layoutSubviews:我们第一次,肯定会去执行这个layoutSubviews: 然后呢,去懒加载这个数组, 然后呢,接下来啊,走这一句话, 第一次…

邮件系统国产化,保障企业信息安全的重要举措

随着信息技术日益发展和成熟&#xff0c;企业信息化建设深入推进&#xff0c;企业信息化管理能力大幅提升&#xff0c;其中邮件系统在企业信息化建设中扮演着至关重要的角色。然而&#xff0c;长期以来&#xff0c;我国企业在邮件系统方面主要依赖于国外的产品&#xff0c;这不…

win11安装SQL Server 2012 企业版

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、硬件要求二、软件安装参考&#xff1…

C语言---操作符详解

1.操作符的分类 • 算术操作符&#xff1a; 、- 、* 、/ 、% • 移位操作符: > • 位操作符: & | ^ • 赋值操作符: 、 、 - 、 * 、 / 、% 、> 、& 、| 、^ • 单⽬操作符&#xff1a; &#xff01;、、--、&、*、、-、~ 、sizeof、(类型) • 关系操…

在windows下使用VS Code、CMake、Make进行代码编译

软件环境 Windows11VS CodeNoneCMake3.26.4-windows-x86_64MinGWNone 电脑系统配置 安装MinGW将MinGW安装文件夹中bin文件夹下的mingw32-make.exe复制并重命名为make.exe在文件夹中添加系统路径&#xff0c;具体位置为 系统->系统信息->高级系统设置->高级->环境…

Linux运维:centos环境变量

前言 在 Linux 运维工作中&#xff0c;管理环境变量是至关重要的一项任务。在 CentOS 环境下&#xff0c;正确配置环境变量可以使系统更加高效和易于管理。 本文将重点讨论 CentOS 环境下的环境变量设置&#xff0c;并就python的环境变量配置方案进行讲解&#xff08;不包含Ano…