函数式编程Stream流(通俗易懂!!!)
目录
1.Lambda表达式
1.1 基本用法
1.2 省略规则
2.Stream流
2.1 常规操作
2.1.1 创建流
2.1.2 中间操作
filter
map
distinct
sorted
limit
编辑skip
flatMap
2.1.3 终结操作
foreach
count
max&min
collect
anyMatch
allMatch
noneMatch
编辑
findAny
findFirst
reduce归并
编辑2.2注意事项
3.Optional
3.1 概述
3.2 使用
3.2.1 创建对象
3.2.2 安全消费值
3.2.3 获取值
编辑 3.2.4 过滤
编辑3.2.5 判断
编辑3.2.6 数据转换
4.函数式接口
4.1 概述
4.2 常见函数式接口
4.3 常见的默认方法
编辑5.方法引用
5.1.1 引用类的静态方法
5.1.2 引用对象的实例方法
6.高级用法
基本数据类型优化
编辑并行流
重点:只关注传入的参数列表和方法体(数据+操作)
1.Lambda表达式
本质是匿名内部类的优化,先写匿名内部类
1.1 基本用法
public class lambdaTest {public static void main(String[] args) {
// int i = calculateNum((int left, int right) -> {
// return left + right;
// });
// System.out.println(i);
//
// printNum((int value) -> {
// return value % 2 ==0;
// });
//
// Integer i1 = typeConver((String s)->{
// return Integer.valueOf(s);
// });
// System.out.println(i1);foreachArr((int value) -> {System.out.println(value);});}public static void foreachArr(IntConsumer consumer){int [] arr = {1,2,3,4,5,6,7,8,9,10};for (int i : arr) {consumer.accept(i);}}public static <R> R typeConver(Function<String,R> function){String str = "1235";R result = function.apply(str);return result;}public static void printNum(IntPredicate predicate){int [] arr = {1,2,3,4,5,6,7,8,9,10};for (int i : arr) {if(predicate.test(i)){System.out.println(i);}}}public static int calculateNum(IntBinaryOperator operator){int a = 10;int b = 20;return operator.applyAsInt(a,b);}
}
1.2 省略规则
- 参数类型可以省略
- 方法体只有一句代码时大括号return和唯一一句代码的分号可以省略
- 方法只有一个参数时小括号可以省略
- 以上规则都记不住也可以省略不记‘
2.Stream流
List<Object> array = new ArrayList<>();array.stream() //把集合转换成流.distinct() //去重.filter(author -> author.getAge() < 18) //过滤年龄小于18的作者.forEach(author -> System.out.println(author.getName())); //打印作者姓名
2.1 常规操作
2.1.1 创建流

2.1.2 中间操作
filter
- 可以对流中的元素进行条件过滤

map
- 可以把对流中的元素进行计算或转换

distinct
-
可以去除流中的重复元素

sorted
- 可以对流中的元素进行排序

limit
- 可以设置流的最大长度,超出的部分将被抛弃
skip
- 跳过流中的前n个元素,返回剩下的元素

flatMap
- map只能把一个对象转换另一个对象作为流中的元素。而flatMap可以把一个对象转换成多个对象作为流中的元素

2.1.3 终结操作
foreach
count
- 可以用来获取当前流中元素的个数

max&min
- 可以用来获取流中的最大&最小值

collect
- 把当前流转成一个集合

anyMatch
- 可以用来判断是否有任意符合匹配条件的元素,结果为boolean类型

allMatch
- 可以用来判断是否都符合匹配条件

noneMatch
findAny
- 查找任意元素

findFirst

reduce归并
- 对流中的数据按照你指定的计算方式计算出一个结果(缩减操作)
- reduce的作用是把stream的元素给组合起来,我们可以传入一个初始值,它会按照我们的计算方式依次拿流中的元素和在初始化值的基础上进行计算,计算结果再和后面的元素计算
2.2注意事项
- 惰性求值(如果没有终结操作,)
- 流是一次性的(一旦一个流对象经过一个终结操作后,这个不能再被使用)
- 不会影响原数据
3.Optional
3.1 概述
我们在编写代码的时候出现最多的就是空指针异常。所以在很多情况下我们需要做各种非空的判断。
3.2 使用
3.2.1 创建对象
Optional就好像是包装类,可以把我们的具体数据封装Optional对象内部。然后我们去使用Optional中封装好的方法操作封装进去的数据就可以避免空指针异常。

3.2.2 安全消费值

3.2.3 获取值
不推荐使用
3.2.4 过滤
3.2.5 判断
3.2.6 数据转换

4.函数式接口
4.1 概述
只有一个抽象方法的接口我们称之为函数式接口
JDK的函数式接口都加上了@Functionallnterface注解进行标识。
4.2 常见函数式接口
- Consumer消费接口
- Function计算转换接口
- Predicate判断接口
- Supplier生产型接口
4.3 常见的默认方法
- and

- or

- negate
5.方法引用
推荐用法:快捷键
我们在使用lambda时,如果方法体只有一个方法的调用的话(包括构造方法)。可以使用方法引用
类名或者对象名:方法名
5.1 语法详解
5.1.1 引用类的静态方法
格式:类名::方法名

5.1.2 引用对象的实例方法

6.高级用法
基本数据类型优化
并行流

相关文章:
函数式编程Stream流(通俗易懂!!!)
目录 1.Lambda表达式 1.1 基本用法 1.2 省略规则 2.Stream流 2.1 常规操作 2.1.1 创建流 2.1.2 中间操作 filter map distinct sorted limit 编辑skip flatMap 2.1.3 终结操作 foreach count max&min collect anyMatch allMatch noneMatch …...
数据分析:转录组差异fgsea富集分析
文章目录 介绍加载R包数据链接导入数据数据预处理DE testing: 2BP vs no-BP比较limma-voomLoad steroid dataIn No-BP patientsIn 2BP patientsCompare gene expression vs bacterial mass其他系统信息介绍 转录组差异fgsea富集分析是一种基于基因集的富集分析方法,它关注的是…...
在Django中安装、配置、使用CKEditor5,并将CKEditor5录入的文章展现出来,实现一个简单博客网站的功能
在Django中可以使用CKEditor4和CKEditor5两个版本,分别对应软件包django-ckeditor和django-ckeditor-5。原来使用的是CKEditor4,python manager.py makemigrations时总是提示CKEditor4有安全风险,建议升级到CKEditor5。故卸载了CKEditor4&…...
AI笔筒操作说明及应用场景
AI笔筒由来: 在快节奏的现代办公环境中,我们一直在寻找既能提升效率、增添便利,又能融入企业文化、展现个人品味的桌面伙伴。为此,我们特推出专为追求卓越、注重细节的您设计的AI笔筒礼品版,它集高科技与实用性于一身…...
Android自启动管控
1. 自启动管控需求来源 自启动、关联启动、交叉启动、推送启动等现象的泛滥除了对个人信息保护带来隐患外,还会导致占用过多的系统CPU和内存资源,造成系统卡顿、发热、电池消耗过快;还可能引入一些包含“恶意代码”的进程在后台隐蔽启动&…...
把握鸿蒙生态崛起的机遇:开发者视角的探讨
大家好,我是程序员小羊! 前言: 近年来,鸿蒙系统(HarmonyOS)的发展备受瞩目。随着其在智能手机、智能穿戴、车载系统和智能家居等领域的广泛应用,鸿蒙系统正逐渐形成与安卓、iOS并列的三足鼎立…...
MySQL初学之旅(1)配置与基础操作
目录 1.前言 2.正文 2.1数据库的发展历程 2.2数据库的基础操作 2.2.1启动服务 2.2.2创建与删除数据库 2.2.3数据类型 2.2.4创建表与删除表 2.3MySQL Workbench基础使用简介 3.小结 1.前言 哈喽大家好吖,今天博主正式开始为大家分享数据库的学习ÿ…...
一款革命性的视频剪辑工具,AI剪辑新纪元:Clapper
如果说AI视频剪辑工具哪家强?还真想不出有什么让人眼前一亮的AI视频剪辑应用。 毕竟随着AI技术的发展越来越快,各种AI应用如雨后春笋般涌现,然而,真正能够在视频剪辑领域脱颖而出的工具却寥寥无几。 今天我要介绍的 Clapper 就是…...
HTML 区块
HTML 区块 HTML(HyperText Markup Language)是构建网页的标准语言,它定义了网页的结构和内容。在HTML中,区块元素是指那些能够定义较大块状结构的元素,比如段落、标题、列表、表格和 divis 等。这些元素通常对页面的布…...
复杂度的讲解
数据结构可以简单理解为在内存中管理数据 它具有速度快 带电存储的特点(临时存储) 如何衡量一个算法的好坏 因此衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度。 时间复杂度主要衡量一个算…...
[ Linux 命令基础 2 ] Linux 命令详解-系统管理命令
🍬 博主介绍 👨🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…...
使用docker部署Prometheus和Grafana去监控mysql和redis
自动化性能监控系统安装部署 相关工具的安装部署 服务工具分配 服务器工具端口10.0.20.9grafana300010.0.20.9prometheus909010.0.20.10mysql330610.0.20.10mysql-exporter910410.0.20.10redis330610.0.20.10redis_exporter9121 使用docker-compose安装prometheus 先拉取p…...
日志管理 | Log360 实现PCI DSS v4.0数据安全合规要求
PCI DSS 是一项网络安全标准,得到所有主要信用卡和支付处理公司的支持,旨在确保信用卡和借记卡号码的安全。最新的PCI DSS v4.0 代表支付卡行业数据安全标准。 任何依赖信用卡交易的企业都不能将数字安全视为一个偷工减料的领域,因为数据泄露…...
JAVA中的string和stringbuffer
【之前面试测试岗位的时候有被问到这个问题,面试结束后特地来学习一下】 目录 谁先被提出的String的使用StringBuffer的使用两者区别 谁先被提出的 String类先于StringBuffer被提出,作为Java语言的基础部分,而StringBuffer是为了解决实际开…...
轻型民用无人驾驶航空器安全操控------理论考试多旋翼部分笔记
官网:民用无人驾驶航空器综合管理平台 (caac.gov.cn) 说明:一是法规部分;二是多旋翼部分 本笔记全部来源于轻型民用无人驾驶航空器安全操控视频讲解平台 目录 官网:民用无人驾驶航空器综合管理平台 (caac.gov.cn) 一、轻型民用无人…...
计算用户订购率梧桐数据库和oracle数据库sql分析
一、背景说明 移动运营商平台提供多种类型的产品权益,用户可以通过订购来使用。平台需要定期统计各个产品的用户订购情况,以便了解各个产品的受欢迎程度。这些统计数据将用于优化产品、提升用户体验和制定市场推广策略。 二、表结构说明 梧桐数据库建…...
通过DNS服务器架构解释DNS请求过程
在前面的章节,这里,基于PCAP数据包和RFC文档详细介绍了DNS请求和响应的每个字段的含义。但是在现实的网络世界中,DNS请求和响应的数据包是怎么流动的,会经过哪些设备。本文将着重说明一下目前网络空间中DNS请求和响应的流动过程。 当前网络空间中比较常见DNS请求的流程如下…...
OKG Research:用户意图驱动的Web3应用变革
出品| OKG Research 作者|Samuel QIN 当前加密市场的快速演变中,用户增长成为行业可持续发展的基石。目前主流观点在推动行业前进的路上,从单纯的技术探索在向更注重应用价值的方向转变。尽管近年来Web3生态系统发展迅速…...
hbase 工具类
hbase 工具类 pom.xml <dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-client</artifactId><version>2.5.10-hadoop3</version> </dependency> <dependency><groupId>com.google.guava<…...
会议直击|美格智能受邀出席第三届无锡智能网联汽车生态大会,共筑汽车产业新质生产力
11月10日,2024世界物联网博览会分论坛——第三届无锡智能网联汽车生态大会在无锡举行,美格智能CEO杜国彬受邀出席,并参与“中央域控:重塑汽车智能架构的未来”主题圆桌论坛讨论,与行业伙伴共同探讨智能网联汽车产业领域…...
双模型灾备方案:OpenClaw同时配置百川2-13B-4bits与Llama3应对服务中断
双模型灾备方案:OpenClaw同时配置百川2-13B-4bits与Llama3应对服务中断 1. 为什么需要双模型灾备 去年冬天的一个深夜,我正在用OpenClaw自动处理一批技术文档的翻译任务。突然收到一连串报警通知——原本稳定运行的Qwen模型服务因为网络波动彻底失联。…...
3分钟搞定Vue时间轴组件:打造优雅时间线应用的终极指南
3分钟搞定Vue时间轴组件:打造优雅时间线应用的终极指南 【免费下载链接】timeline-vuejs Minimalist Timeline ⏳ with VueJS 💚 项目地址: https://gitcode.com/gh_mirrors/ti/timeline-vuejs 还在为Vue项目中的时间线展示而烦恼吗?t…...
FJSP:蛇鹫优化算法(SBOA)求解柔性作业车间调度问题(FJSP),提供MATLAB代码
FJSP:蛇鹫优化算法(SBOA)求解柔性作业车间调度问题(FJSP),提供MATLAB代码当车间调度遇上非洲大草原的蛇鹄,会碰撞出什么样的火花?今天咱们用MATLAB实现一种新颖的群智能算法——蛇鹄…...
深入理解incubator-pagespeed-ngx配置:50个实用参数详解与最佳实践
深入理解incubator-pagespeed-ngx配置:50个实用参数详解与最佳实践 Apache incubator-pagespeed-ngx是一个强大的Nginx性能优化模块,能够自动优化网站资源,显著提升页面加载速度。无论你是网站管理员还是开发人员,掌握其配置参数…...
机械扑翼飞鸟机构3D图纸 Solidworks设计
机械扑翼飞鸟机构的设计聚焦于模拟鸟类飞行姿态,通过机械结构的协同运动实现扑翼动作。其核心作用在于将复杂的生物运动转化为可工程化的机械系统,为仿生飞行器研究提供基础支撑。该机构通常由传动系统、扑翼组件及支撑框架构成,传动系统通过…...
黑马点评技术汇总(一)验证码登录
一、session实现验证码登录总思路: 前端提交手机号发起code请求,服务端校验手机号是否符合格式,成功后生成验证码存入session并发送给用户。 用户提交手机号和验证码验证手机是否符合格式(这里有个bug)验证码是否和ses…...
永磁同步电机双矢量模型预测电流MPCC控制仿真:传统与现代控制策略的对比分析
永磁同步电机双矢量模型预测电流MPCC控制仿真【参考文献】 (1)参考文献:《永磁同步电机鲁棒双矢量模型预测电流控制_郭鑫》 (2)描述:传统单矢量预测电流控制在单个控制周期内只能输出单个电压矢量ÿ…...
Maxwell16.0实战:如何用实验电流数据搞定电机仿真(附.tab文件制作技巧)
Maxwell16.0实战:实验电流数据驱动电机仿真的全流程解析 电机仿真作为现代工业设计的重要环节,其准确性直接影响产品性能评估。而将实测电流数据融入仿真流程,往往是工程师突破"理想模型"局限的关键一步。本文将系统性地拆解从实验…...
如何去选择品质优秀的段码屏厂家
在现代电子产品中,LCD液晶段码屏的应用越来越广泛。选择一家优质的厂家不仅能保证产品质量,还能提供高效的服务。本文将为您推荐十家在LCD液晶段码屏领域表现突出的厂家,帮助您做出明智的选择。1. 杭州斡能电子有限公司杭州斡能电子有限公司&…...
告别IE时代:手把手教你用allWebPlugin在Chrome/Firefox中运行ActiveX控件(附多插件配置)
企业级ActiveX迁移实战:基于allWebPlugin的现代浏览器兼容方案 当某省级政务系统在2023年进行浏览器兼容性升级时,技术团队发现核心OA模块因依赖ActiveX控件无法在Chrome中运行。这个场景正在全国范围内重复上演——据行业调研显示,超过67%的…...

