Java流式编程的使用

流式编程的使用步骤

使用流式编程的步骤就是: 设置数据源, 设置数据处理的方式,设置收集结果的方式

使用filter方法实现过滤条件

例子为下(查询年龄大于18的用户):

    @Testpublic void streamTest1() {List<Student> students = Arrays.asList(new Student("tolen", 22, "男"),new Student("ostkakaw", 19, "女"),new Student("tolenaitolen", 18, "男"));List<Student> result = students.stream() //stream方法就是设置数据源.filter(user -> user.getAge() > 18) //设置过滤条件,这里的过滤条件使用lambda表达式.collect(Collectors.toList());//将结果设置为一个listfor (Student student : result) {System.out.println(student.toString());}}

 结果为下:

特殊情况

 1. 限制条件存在多个且需要同时成立(且)

编写格式为下:

    @Testpublic void streamTest3() {List<Student> students = Arrays.asList(new Student("tolen", 22, "男"),new Student("ostkakaw", 19, "女"),new Student("tolenaitolen", 18, "男"));//编写限制条件Predicate<Student> predicate1 = user -> user.getAge() == 18;Predicate<Student> predicate2 = user -> user.getName() == "tolenaitolen";List<Student> result = students.stream() //stream方法就是设置数据源.filter(predicate1.and(predicate2)) //如果存在多个需要同时成立的条件时,需要使用and()方法.collect(Collectors.toList());//将结果设置为一个listfor (Student student : result) {System.out.println(student.toString());}}

 结果为下:

2. 限制条件存在多个且不需要同时成立(或)

 编写格式为下:

    @Testpublic void streamTest4() {List<Student> students = Arrays.asList(new Student("tolen", 22, "男"),new Student("ostkakaw", 19, "女"),new Student("tolenaitolen", 18, "男"));//编写限制条件Predicate<Student> predicate1 = user -> user.getAge() > 18;Predicate<Student> predicate2 = user -> user.getName() == "tolen";List<Student> result = students.stream() //stream方法就是设置数据源.filter(predicate1.or(predicate2)) //如果存在多个需要同时成立的条件时,需要使用and()方法.collect(Collectors.toList());//将结果设置为一个listfor (Student student : result) {System.out.println(student.toString());}}

结果为下:

使用limit方法限制list的长度

例子为下:

    @Testpublic void streamTest2() {List<Student> students = Arrays.asList(new Student("tolen", 22, "男"),new Student("ostkakaw", 19, "女"),new Student("tolenaitolen", 18, "男"));students.stream()//设置数据源.limit(2)//设置最大的长度.collect(Collectors.toList()) //将结果设置为一个list.forEach(student -> System.out.println(student.toString()));}

结果为下:

使用min和max方法找出最值

 例子为下:

    @Testpublic void streamTest5() {List<Integer> nums = Arrays.asList(4, 5, 1, 3, 6);Integer maxResult = nums.stream()//设置数据源.max(Integer::compareTo) //这里的lambda表达式使用Integer默认的比较方法,如果需要查询最小值就使用min方法.get();//max方法返回的数据是Optional,所以需要使用get方法才获得最终的数据System.out.println(maxResult);}

结果为下:

如果需要查询最小值的话,我们只需要将max方法换成min方法即可。

使用sorted方法对list进行排序

 例子为下:

    @Testpublic void streamTest6() {List<Integer> nums = Arrays.asList(4, 5, 1, 3, 6);nums.stream() //设置数据源.sorted(Integer::compareTo) //进行排序操作,默认使用升序.collect(Collectors.toList()).forEach(num -> System.out.println(num));}

结果为下:

特殊情况

 需要实现降序,对应的代格式为下:

    @Testpublic void streamTest6() {List<Integer> nums = Arrays.asList(4, 5, 1, 3, 6);nums.stream() //设置数据源.sorted(Comparator.reverseOrder()) //进行排序操作,默认使用升序,lambda表达式设置为降序.collect(Collectors.toList()).forEach(num -> System.out.println(num));}

结果为下:

使用map方法和reduce方法对应list的数据进行修改

map方法(返回的结果是多个,而非只有一个,用于返回一个完整的list)

例子为下:

    @Testpublic void streamTest7() {List<Integer> nums = Arrays.asList(4, 5, 1, 3, 6);nums.stream() //设置数据源.map(num -> num + 10).collect(Collectors.toList()).forEach(num -> System.out.println(num));}

效果为下:

reduce方法(返回的结果只有一个,用于做累计操作)

例子为下:

    @Testpublic void streamTest8() {List<Integer> nums = Arrays.asList(4, 5, 1, 3, 6);Integer result = nums.stream() //设置数据源.reduce((num, sum) -> num + sum) //等于做累加操作,在lambda表达式中的参数 num 和sum 的位置可以互换,不影响累加的结果.get();System.out.println(result);}

 结果为下:

等于做累加操作,在lambda表达式中的参数 num 和sum 的位置可以互换,不影响累加的结果。

使用count方法计算list的长度

例子为下:

    @Testpublic void streamTest9() {List<Integer> nums = Arrays.asList(4, 5, 1, 3, 6);long count = nums.stream() //设置数据源.count();System.out.println(count);}

效果为下:

使用flatMap方法对数据进行压扁

例子:

例子中通过map会获得对应的数组,通过flatMap方法将这些数组压扁为。(便于后续操作)

 作用:将数组转换为流。

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

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

相关文章

《JVM》第二篇 JVM内存模型深度剖析与优化

目录 一. JDK体系结构与跨平台特性介绍二. JVM内存模型深度剖析三. 从Jvisualvm来研究下对象内存流转模型四. GC Root与STW机制五. JVM参数设置通用模型 一. JDK体系结构与跨平台特性介绍 二. JVM内存模型深度剖析 按照线程是否共享来划分 TLAB(Thread Local Allocation Buffe…

改写软件-怎么选择改写软件

什么是改写软件&#xff1f;改写软件是基于自然语言处理技术的工具&#xff0c;它们可以分析一段文字&#xff0c;并将其重新表达&#xff0c;以保持原始意义&#xff0c;但使用不同的词汇和结构。这种技术可用于减少内容的重复&#xff0c;增加多样性&#xff0c;或者简化复杂…

Python量化交易学习笔记(0)

本文将简单回顾我的量化交易学习的历程&#xff0c;并给出新手学习量化交易的建议学习路线&#xff0c;适合于尚无稳定盈利策略的量化新手阅读&#xff0c;量化大神们请略过。 本文将在博客中置顶&#xff0c;并不定期根据我的学习、交易进行更新。 回顾学习历程 2020年初接…

SpringMVC初级

文章目录 一、SpringMVC 概述二、springMVC步骤1、新建maven的web项目2、导入maven依赖3、创建controller4、创建spring-mvc.xml配置文件&#xff08;本质就是spring的配置件&#xff09;5、web.xml中配置前端控制器6、新建a.jsp文件7、配置tomcat8、启动测试 三、工作流程分析…

pytorch环境搭建到pycharm项目映射配置(成功后回顾性记录/自用)

利用Anaconda创建pytorch虚拟环境 前提&#xff1a;成功安装Anaconda&#xff0c;确保可以打开NVIDIA控制面板 开始-》搜索“Anaconda Prompt” 打开后输入&#xff1a;conda create -n 你的虚拟环境名 python3.9。输入y&#xff0c;继续安装&#xff0c;完成。 输入&#…

合肥综合性国家科学中心人工智能研究院-机器学习作业(一)

1.试析min-max规范化和z-score规范化的优缺点 可参考博客&#xff1a;https://wenku.csdn.net/answer/fdbf30eb204644e5b69fc533a3757268 2.试分析损失函数与性能度量的关系 损失函数和性能度量之间的关系可以根据优化目标来理解。损失函数的优化目标是最小化预测值与实际值之…

力扣刷题-链表-两两交换链表中的节点

24.两两交换链表中的节点 给定一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后的链表。你不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的进行节点交换。 解题思路 采用正常模拟的方法。 建议使用虚拟头结点&#xff0c;这样会方便很多&am…

面向面试知识-Redis

面向面试知识-Redis 什么是Redis 运行于内存的基于key-value的非关系型数据库。 一款开源的内存数据结构存储&#xff0c;用作数据库、缓存、消息代理等。&#xff08;可以基于Redis实现分布式锁、以及消息队列&#xff09; 发布订阅&#xff1f;&#xff1f; 对数据类型的操…

消息队列中,如何保证消息的顺序性?

本文选自&#xff1a;advanced-java 作者&#xff1a;yanglbme 问&#xff1a;如何保证消息的顺序性&#xff1f; 面试官心理分析 其实这个也是用 MQ 的时候必问的话题&#xff0c;第一看看你了不了解顺序这个事儿&#xff1f;第二看看你有没有办法保证消息是有顺序的&#xf…

Spring Boot的新篇章:探索2.0版的创新功能

文章目录 引言1. Spring Boot 2.0的响应式编程2. 自动配置的改进3. Spring Boot 2.0的嵌入式Web服务器4. Spring Boot 2.0的Actuator端点5. Spring Boot 2.0的Spring Data改进6. Spring Boot 2.0的安全性增强7. Spring Boot 2.0的监控和追踪8. Spring Boot 2.0的测试改进结论 &…

6、SpringBoot_项目的打包与运行

七、SpringBoot项目的打包与运行 1.目前项目怎么运行的 通过浏览器访问idea 将jar部署到服务器 2.maven 打包项目 命令 mvn package使用命令后会得到如下的jar 3.程序运行 命令 java -jar 项目.jar启动如下 4.springboot打包需要插件 插件 <plugin><group…

从零学习开发一个RISC-V操作系统(二)丨GCC编译器和ELF格式

本篇文章的内容 一、GCC&#xff08;GUN Compiler Collection&#xff09;1.1 GCC的命令格式1.2 GCC的主要执行步骤1.3 GCC涉及的文件类型 二、ELF简介2.1 ELF文件格式图2.2 ELF文件处理的相关工具2.3 练习 本系列是博主参考B站课程学习开发一个RISC-V的操作系统的学习笔记&…

机器学习第十四课--神经网络

总结起来&#xff0c;对于深度学习的发展跟以下几点是离不开的: 大量的数据(大数据)计算资源(如GPU)训练方法(如预训练) 很多时候&#xff0c;我们也可以认为真正让深度学习爆发起来的是数据和算力&#xff0c;这并不是没道理的。 由于神经网络是深度学习的基础&#xff0c;学…

debug过程中,矩阵左乘右乘相关概念梳理

1. 变换点或者变换向量 1.1左乘 矩阵左乘通常是指对”目标点“进行左乘&#xff0c;即: A ′ R ∗ A AR*A A′R∗A 其中&#xff0c;A为原始3维点&#xff0c;表示一个3*1的列向量&#xff0c;R为33的旋转矩阵&#xff0c;A‘为变换后的点 B ′ T ∗ B BT*B B′T∗B 其中…

The 2023 ICPC Asia Regionals Online Contest (1) E. Magical Pair(数论 欧拉函数)

题目 T(T<10)组样例&#xff0c;每次给出一个n(2<n<1e18)&#xff0c; 询问多少对&#xff0c;满足 答案对998244353取模&#xff0c;保证n-1不是998244353倍数 思路来源 OEIS、SSerxhs、官方题解 2023 ICPC 网络赛 第一场简要题解 - 知乎 题解 官方题解还没有…

SpringBoot2.7.14整合Swagger3.0的详细步骤及容易踩坑的地方

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 &#x1f4d6;所属专栏&#xff1a;Sp…

指针笔试题详解

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂。 目录 1.前言 2.指针题写出下列程序的结…

记一次逆向某医院挂号软件的经历

背景 最近家里娃需要挂专家号的儿保&#xff0c;奈何专家号实在过于抢手&#xff0c;身为程序员的我也没有其他的社会资源渠道可以去弄个号&#xff0c;只能发挥自己的技术力量来解决这个问题了。 出师不利 首先把应用安装到我已经 Root 过的 Pixel 3 上面&#xff0c;点击应…

【重新定义matlab强大系列十五】非线性数据拟合和线性拟合-附实现过程

&#x1f517; 运行环境&#xff1a;Matlab &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 #### 防伪水印——左手の明天 #### &#x1f497; 大家好&#x1f917;&#x1f91…

WinApp自动化测试之工具的选择

WinApp&#xff08;Windows APP&#xff09;是运行在Windows操作系统上的应用程序&#xff0c;通常会提供一个可视的界面&#xff0c;用于和用户交互。 例如运行在Windows系统上的Microsoft Office、PyCharm、Visual Studio Code、Chrome&#xff0c;都属于WinApp。常见的WinA…