Java - Stream流式编程

Stream流式操作

Stream流式操作,就是学习java.util.stream包下的APIStream不同于java的输入输出流,是实现对集合(Collection)的复杂操作,例如查找、替换、过滤和映射数据等,集合是一种静态的数据结构,存储在内存中,而Stream是用于计算的,通过CPU实现计算,因此可以认为Stream就是处理集合数据的各种算法流程。

Stream流式操作流程

Stream流式操作主要有 3 个步骤:

1、创建Stream对象:通过一些数据源创建流对象

2、中间操作:对数据源的数据进行处理(过滤、排序等)

3、终止操作:一旦执行终止操作, 就执行中间的链式操作,并产生结果

Stream的获取

1.针对集合:Collection中的方法Stream<E> stream()  2.针对数组:Stream接口中的静态方法:static <T> Stream<T> of(T... values)  

Stream的操作

准备需要操作的集合

// 由数字组成的集合
List<Integer> numberList = Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5);// Student类:自增的主键id,name由uuid生成,且首位是数字
List<Student> selectList = studentMapper.selectList(new LambdaQueryWrapper<>());

Stream的中间操作

// filter:过滤
// 截取首位数字,输出取余为0的对象
List<Student> list1 = selectList.stream().filter(student -> {int i = Integer.parseInt(student.getName().substring(0, 1));return 0 == (i % 2);
}).collect(Collectors.toList());
// map:将流中的每个元素映射为另一个元素,生成一个新的流
// 输出每个Student
List<Integer> list2 = selectList.stream().map(student -> student.getName().length()).collect(Collectors.toList());
// sorted:对流中的元素进行排序,默认是自然顺序排序,也可以传入Comparator进行自定义排序
// 集合中是一个对象
// 根据id正序
List<Student> list3 = selectList.stream().sorted(Comparator.comparing(Student::getId)).collect(Collectors.toList());
// 根据id倒叙
List<Student> list4 = selectList.stream().sorted(Comparator.comparing(Student::getId).reversed()).collect(Collectors.toList());
// 集合中是数字
List<Integer> list5 = numberList.stream().sorted((o1, o2) -> {if (o1.compareTo(o2) > 0) {return -1;} else {return 1;}
}).collect(Collectors.toList());
// distinct:去重
List<Integer> list6 = numberList.stream().distinct().collect(Collectors.toList());
// limit:截取前几个元素
List<Integer> list7 = numberList.stream().limit(3).collect(Collectors.toList());
// skip:越过前几个元素
List<Integer> list8 = numberList.stream().skip(3).collect(Collectors.toList());

Stream的终止操作

// forEach:遍历操作,没有返回值,在accept方法中编写集合处理逻辑即可
selectList.forEach(new Consumer<Student>() {@Overridepublic void accept(Student student) {System.err.println(student.getId()+" -- "+student.getName())}
});
// 可简化为
selectList.forEach(student -> System.err.println(student.getId()+" -- "+student.getName()));
// collect:将流中的元素收集到一个集合中。可以通过Collectors工具类提供的方法来实现不同类型的收集操作。
// 例如:从查询到的所有学生中,过滤id>10的,然后将过滤出来的所有学生放进一个新的集合中
List<Student> studentList = selectList.stream().filter(student -> student.getId() > 10).collect(Collectors.toList());
// reduce:对流中的元素求和
int sum = numberList.stream().reduce(0, Integer::sum);
// count:统计个数
long count = numberList.stream().count();
// anyMatch:判断流中是否存在任意一个元素满足给定条件。
boolean anyMatch = numberList.stream().anyMatch(integer -> integer % 2 == 0);
// anyMatch:判断流中的所有元素是否都满足给定条件。
boolean allMatch = numberList.stream().allMatch(integer -> integer % 2 == 0);

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

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

相关文章

LeetCode547省份数量

题目描述 有 n 个城市&#xff0c;其中一些彼此相连&#xff0c;另一些没有相连。如果城市 a 与城市 b 直接相连&#xff0c;且城市 b 与城市 c 直接相连&#xff0c;那么城市 a 与城市 c 间接相连。省份 是一组直接或间接相连的城市&#xff0c;组内不含其他没有相连的城市。给…

第十一章 文件及IO操作

第十一章 文件及IO操作 文件的概述及基本操作步骤 文件&#xff1a; 存储在计算机的存储设备中的一组数据序列就是文件不同类型的文件通过后缀名进行区分 文本文件&#xff1a;由于编码格式的不同&#xff0c;所占磁盘空间的字节数不同(例如GBK编码格式中一个中文字符占2字…

cesium绘制三角网可视化及mesh网格数据解析

可视化运行效果(水质污染扩散) 实现运行效果 术语 Mesh网格数据解析 Mesh&#xff08;网格&#xff09;在不同领域有不同的应用和定义。在计算机网络中&#xff0c;Mesh网络指的是一种无中心的网状结构&#xff0c;每个节点都与其他节点相连。而在3D计算机图形学中&#…

云原生Kubernetes: K8S 1.26版本 部署KubeSphere

目录 一、实验 1.环境 2.K8S 1.26版本部署HELM 3.K8S 1.26版本 部署KubeSphere 4.安装KubeSphere DevOps 二、问题 1.如何安装Zadig 2.扩展插件Zadig安装失败 3.calico 如何实现不同node通信 4.如何清除docker占用的磁盘空间 5.如何强制删除资源 6.namespace删除不…

CGAL 点云生成高程模型数据(DSM)

点云生成高程模型 一、什么是DSM?二、C++代码三、结果可视化一、什么是DSM? DSM(Digital Surface Model)是一种数字高程模型,通常用于描述地表地形的数字化表示。它是由一系列离散的高程数据点组成的三维地形模型,其中每个点都具有其相应的高程值。   DSM主要用于获取和…

宿舍管理系统--毕业设计

毕业设计&#x1f4bc;MD5加密&#x1f512;SSM框架&#x1f3a8;Layui框架&#x1f384; 实现功能 管理员的登录与登出 管理员,班级,学生,宿舍&#xff0c;卫生&#xff0c;访客各模块增删改查 个别模块关联查询 各个模块数据导出Excel 一些截图

[4]CUDA中的向量计算与并行通信模式

CUDA中的向量计算与并行通信模式 本节开始&#xff0c;我们将利用GPU的并行能力&#xff0c;对其执行向量和数组操作讨论每个通信模式&#xff0c;将帮助你识别通信模式相关的应用程序&#xff0c;以及如何编写代码 1.两个向量加法程序 先写一个通过cpu实现向量加法的程序如…

软件设计:基于 python 代码快速生成 UML 图

1. 官方文档 PlantUML Language Reference Guide Comate | 百度研发编码助手 百度 Comate (Coding Mate Powered by AI) 是基于文心大模型的智能代码助手&#xff0c;结合百度积累多年的编程现场大数据和外部优秀开源数据&#xff0c;可以生成更符合实际研发场景的优质代码。…

自动化测试里的数据驱动和关键字驱动思路的理解

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 初次接触自动化测试时&#xff0c;对数据驱动和关键字驱动不甚理解&#xff0c;觉得有点故弄玄须…

GBDT、XGBoost、LightGBM算法详解

文章目录 一、GBDT (Gradient Boosting Decision Tree) 梯度提升决策树1.1 回归树1.2 梯度提升树1.3 Shrinkage1.4 调参1.5 GBDT的适用范围1.6 优缺点 二、XGBoost (eXtreme Gradient Boosting)2.1 损失函数2.2 正则项2.3 打分函数计算2.4 分裂节点2.5 算法过程2.6 参数详解2.7…

oracle中insert all的用法

1、简述 使用insert into语句进行表数据行的插入&#xff0c;但是oracle中有一个更好的实现方式&#xff1a;使用insert all语句。 insert all语句是oracle中用于批量写数据的 。insert all分又为 无判断条件插入有判断条件插入有判断条件插入分为 Insert all when... 子句 …

利用 MongoDB Atlas 进行大模型语义搜索和RAG

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学. 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总合集&…

基于英飞凌BGT60LTR11AIP E6327芯片具低功耗的脉冲多普勒操作模式常用于汽车应用的雷达上

芯片特征&#xff1a; 60 GHz收发器MMIC&#xff0c;带一个发射器和一个接收器单元封装天线&#xff08;AIP&#xff09;&#xff08;6.73.30.56 mm3)低功耗的脉冲多普勒操作模式自主模式用于运动和运动方向的集成检测器运动检测信号的直接输出目标检测范围的15个可配置阈值检测…

Android14之Binder调试(二百一十一)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

前端面试题日常练-day21 【面试题】

题目 希望这些选择题能够帮助您进行前端面试的准备&#xff0c;答案在文末。 AJAX 是什么的缩写&#xff1f; a) Asynchronous JavaScript and XMLb) Asynchronous JavaScript and XHTMLc) Asynchronous Java and XMLd) Asynchronous Java and XHTML使用 AJAX 可以实现以下哪…

2024年5月20日优雅草蜻蜓API大数据服务中心v2.0.4更新

v2.0.4更新 v2.0.4更新 2024年5月20日优雅草蜻蜓API大数据服务中心v2.0.4更新-增加ai绘画接口增加淘宝联想词接口底部增加联系方式 更新日志 底部增加联系方式 增加ai绘画接口 增加淘宝联想词接口 增加用户中心充值提示 用户中心内页颜色改版完成 截图 部分具体更新接口信…

神经网络优化器-从SGD到AdamW

优化器准则 凸优化基本概念 先定义凸集&#xff0c;集合中的两个点连接的线还在集合里面&#xff0c;就是凸集&#xff0c;用数学语言来表示就是&#xff1a;对于集合中的任意两个元素x&#xff0c;y以及任意实数 λ ∈ ( 0 , 1 ) \lambda \in (0,1) λ∈(0,1)&#xff0c;有…

【NLP】词性标注

词 词是自然语言处理的基本单位&#xff0c;自动词法分析就是利用计算机对词的形态进行分析&#xff0c;判断词的结构和类别。 词性&#xff08;Part of Speech&#xff09;是词汇最重要的特性&#xff0c;链接词汇和句法 词的分类 屈折语&#xff1a;形态分析 分析语&#…

k8s 1.24.x之后如果rest 访问apiserver

1.由于 在 1.24 &#xff08;还是 1.20 不清楚了&#xff09;之后&#xff0c;下面这两个apiserver的配置已经被弃用 了&#xff0c;简单的说就是想不安全的访问k8s是不可能了&#xff0c;所以只能走安全的访问方式也就是 https://xx:6443了&#xff0c;所以需要证书。 - --ins…

Git系列:git rm 的高级使用技巧

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…