Java8Stream

目录

什么是Stream?

IO流:

Java8Stream:

什么是流?

stream图解

获取流

集合类,使用 Collection 接口下的 stream()

代码

数组类,使用 Arrays 中的 stream() 方法

代码

stream,使用 Stream 中的静态方法

代码

流操作

按步骤写

代码

链式调用

代码

运行

中间操作:

 API

代码 

运行

代码 

运行

代码

运行 

终端操作:

API

代码

运行

代码

运行

代码

运行

代码

运行

代码

运行

代码

运行


什么是Stream?

IO流:

输入输出文件的

Java8Stream:

处理数据集合(数组,集合类);

对数组,集合类 进行各种操作(过滤,排序......);

stream处理数据的大体过程:

数组/集合类-->流-->各种操作(排序,过滤...)-->结果。

什么是流?

数据和集合类更偏向于存储数据(各种结构);

stream更偏向于数据操作。

stream图解

获取流

获取流,把集合或者数组转化为stream对象。

集合类,使用 Collection 接口下的 stream()
代码
package com.ffyc.stream;import java.util.ArrayList; 
import java.util.stream.Stream;public class Demo1 {public static void main(String[] args) { ArrayList<Integer> arrayList = new ArrayList<>();arrayList.add(1);arrayList.add(2);arrayList.add(3);arrayList.add(4);//把集合转为流Stream<Integer> stream = arrayList.stream(); }
}
数组类,使用 Arrays 中的 stream() 方法
代码
package com.ffyc.stream; import java.util.Arrays;
import java.util.stream.IntStream; public class Demo1 {public static void main(String[] args) { int[] array = new int[]{1,2,3,4};//把数组转为流IntStream intStream = Arrays.stream(array); }
}
stream,使用 Stream 中的静态方法
代码
package com.ffyc.stream;import java.util.stream.Stream;public class Demo1 {public static void main(String[] args) { Stream<Integer> integerStream = Stream.of(1, 2, 3, 4, 5);}
}

流操作

按步骤写
代码
package com.ffyc.stream;import java.util.Arrays;
import java.util.stream.Stream;public class Demo2 {public static void main(String[] args) {   Integer[] array = new Integer[]{1,2,3,4,5};Stream<Integer> stream = Arrays.stream(array);Stream stream1 = stream.filter();Stream stream2 = stream1.sorted();}
}
链式调用
代码
package com.ffyc.stream;import java.util.Arrays;
import java.util.stream.Stream;public class Demo2 {public static void main(String[] args) { long sum = Arrays.stream(array).sorted().count();}
}
运行

中间操作:

流的各种数据处理

 API

filter:过滤流中的某些元素,
sorted(): 自然排序,流中元素需实现 Comparable 接口
distinct: 去除重复元素 

代码 
package com.ffyc.stream;import java.util.Arrays; public class Demo2 {public static void main(String[] args) { Integer[] array = new Integer[]{1,2,3,4,2,5}; Arrays.stream(array).filter((e)->{return e<5;}).sorted((o1,o2)->{return o2-o1;}).distinct().forEach((e)->{System.out.println(e);});}
}
运行

limit(n): 获取 n 个元素
skip(n): 跳过 n 元素,配合 limit(n)可实现分页

代码 
package com.ffyc.stream;import java.util.Arrays; public class Demo2 {public static void main(String[] args) { Integer[] array = new Integer[]{1,2,3,4,2,5}; Arrays.stream(array)//跳过指定数量个元素.skip(2)//取出指定数量个元素.limit(2).forEach((e)->{System.out.println(e);}); }
}
运行

map():将其映射成一个新的元素

代码
package com.ffyc.stream;public class Student {private int num;private String name;private int age;public Student(int num, String name, int age) {this.num = num;this.name = name;this.age = age;}public int getNum() {return num;}public void setNum(int num) {this.num = num;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"num=" + num +", name='" + name + '\'' +", age=" + age +'}';}
}
package com.ffyc.stream;import java.util.ArrayList;
import java.util.Arrays; 
import java.util.Map;
import java.util.stream.Collectors;public class Demo4 {public static void main(String[] args) {Student s1 = new Student(001,"张三",18);Student s2 = new Student(002,"李四",19);Student s3 = new Student(003,"王五",29);Student s4 = new Student(004,"王麻子",21);Student s5 = new Student(005,"丽丽",19);ArrayList<Student> students = new ArrayList<>();students.add(s3);students.add(s1);students.add(s2);students.add(s5);students.add(s4); Object[] array = students.stream().map((Student::getNum))//将对象中某个属性的值映射到一个新集合中.toArray();System.out.println(Arrays.toString(array));Map<Integer, String> map = students.stream().collect(Collectors.toMap(Student::getNum, Student::getName));System.out.println(map);}
}
运行 

终端操作:

把流转为最终结果(数组/集合/单值)

API

Min:返回流中元素最小值
Max:返回流中元素最大值 

代码
package com.ffyc.stream;import java.util.Arrays; public class Demo3 {public static void main(String[] args) { Integer[] array = new Integer[]{1,2,3,4,2,5};Integer max = Arrays.stream(array).distinct().max((o1, o2) -> {//最大值return o1 - o2;}).get();System.out.println(max);Integer min = Arrays.stream(array).distinct().min((o1, o2) -> {//最小值return o1 - o2;}).get();System.out.println(min); 
}
运行

count:返回流中元素的总个数

代码
package com.ffyc.stream;import java.util.Arrays; public class Demo3 {public static void main(String[] args) { Integer[] array = new Integer[]{1,2,3,4,2,5}; long count = Arrays.stream(array).distinct().count();//统计元素个数System.out.println(count); }
}
运行

Reduce:所有元素求和

代码
package com.ffyc.stream;import java.util.Arrays; public class Demo3 {public static void main(String[] args) { Integer[] array = new Integer[]{1,2,3,4,2,5}; /long reduce = Arrays.stream(array).distinct().reduce((a,b)->{//求和return a+b;}).get();System.out.println(reduce); }
}
运行

anyMatch:接收一个 Predicate 函数,只要流中有一个元素满足条件则返回 true,否则返回 false
allMatch:接收一个 Predicate 函数,当流中每个元素都符合条件时才返回 true,否则返回 false

代码
package com.ffyc.stream;import java.util.Arrays; public class Demo3 {public static void main(String[] args) { Integer[] array = new Integer[]{1,2,3,4,2,5}; Boolean result1 = Arrays.stream(array).distinct().anyMatch((e)->{//只有有一个元素满足条件,返回truereturn e>2;});System.out.println(result1);Boolean result2 = Arrays.stream(array).distinct().allMatch((e)->{//所有的条件都满足条件,返回truereturn e>2;});System.out.println(result2); }
}
运行

findFirst:返回流中第一个元素

代码
package com.ffyc.stream;import java.util.Arrays; public class Demo3 {public static void main(String[] args) { Integer[] array = new Integer[]{1,2,3,4,2,5}; Integer result = Arrays.stream(array).distinct().findFirst().get();System.out.println(result);}
}
运行

collect:将流中的元素倒入一个集合,Collection 或 Map

代码
package com.ffyc.stream;public class Student {private int num;private String name;private int age;public Student(int num, String name, int age) {this.num = num;this.name = name;this.age = age;}public int getNum() {return num;}public void setNum(int num) {this.num = num;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"num=" + num +", name='" + name + '\'' +", age=" + age +'}';}
}
package com.ffyc.stream;import java.util.ArrayList; 
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;public class Demo4 {public static void main(String[] args) {Student s1 = new Student(001,"张三",18);Student s2 = new Student(002,"李四",19);Student s3 = new Student(003,"王五",29);Student s4 = new Student(004,"王麻子",21);Student s5 = new Student(005,"丽丽",19);ArrayList<Student> students = new ArrayList<>();students.add(s3);students.add(s1);students.add(s2);students.add(s5);students.add(s4);List<Student> collect = students.stream().sorted((a,b)->{ //对学生对象集合进行排序,必须给定排序的规则return a.getNum()-b.getNum();}).collect(Collectors.toList());System.out.println(collect);List<Student> res = students.stream().filter((stu) -> {return  stu.getAge()>18;}).collect(Collectors.toList());System.out.println(res);List<Integer> list = students.stream().map(Student::getNum).collect(Collectors.toList());System.out.println(list);}
}
运行

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

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

相关文章

重生之 SpringBoot3 入门保姆级学习(02、打包部署)

重生之 SpringBoot3 入门保姆级学习&#xff08;02、打包部署&#xff09; 1.6 打包插件1.7 测试 jar 包1.8 application.properties 的相关配置 1.6 打包插件 官网链接 https://docs.spring.io/spring-boot/docs/current/reference/html/getting-started.html#getting-starte…

【Python】 XGBoost模型的使用案例及原理解析

原谅把你带走的雨天 在渐渐模糊的窗前 每个人最后都要说再见 原谅被你带走的永远 微笑着容易过一天 也许是我已经 老了一点 那些日子你会不会舍不得 思念就像关不紧的门 空气里有幸福的灰尘 否则为何闭上眼睛的时候 又全都想起了 谁都别说 让我一个人躲一躲 你的承诺 我竟然没怀…

自学动态规划—— 一和零

一和零 474. 一和零 - 力扣&#xff08;LeetCode&#xff09; 其实遇到这种还好说&#xff0c;我宁愿遇见这种&#xff0c;也不想遇见那些奇奇怪怪递推公式的题目。 这里其实相当背包要满足两个条件&#xff0c;所以我们可以将dp开成二维的&#xff0c;之后的操作&#xff0…

Kubernetes(K8S) 集群环境搭建指南

Kubernetes&#xff08;简称K8s&#xff09;是一个开源的容器编排平台&#xff0c;旨在自动化部署、扩展和管理容器化应用。K8S环境搭建过程比较复杂&#xff0c;涉及到非常多组件安装和系统配置&#xff0c;本文将会详细介绍如何在服务器上搭建好Kubernetes集群环境。 在学习…

C语言---求一个整数存储在内存中的二进制中1的个数--3种方法

//编写代码实现&#xff1a;求一个整数存储在内存中的二进制中1的个数 //第一种写法 /*int count_bit_one(unsigned int n) {int count 0;while (n )//除到最后余数是0&#xff0c;那么这个循环就结束了{//这个题就是可以想成求15的二进制的过程//每次都除以2&#xff0c;余数…

跟小伙伴们说一下

因为很忙&#xff0c;有一段时间没有更新了&#xff0c;这次先把菜鸟教程停更一下&#xff0c;因为自己要查缺补漏一些细节问题&#xff0c;而且为了方便大家0基础也想学C语言&#xff0c;这里打算给大家开一个免费专栏&#xff0c;这里大家就可以好好学习啦&#xff0c;哪怕0基…

面试题·栈和队列的相互实现·详解

A. 用队列实现栈 用队列实现栈 实现代码如下 看着是队列&#xff0c;其实实际实现更接近数组模拟 typedef struct {int* queue1; // 第一个队列int* queue2; // 第二个队列int size; // 栈的大小int front1, rear1, front2, rear2; // 两个队列的首尾指针 } MyS…

图像处理ASIC设计方法 笔记25 红外成像技术:未来视觉的革命

在当今科技飞速发展的时代,红外成像技术以其独特的优势,在医疗、工业检测等多个领域扮演着越来越重要的角色。本章节(P146 第7章红外焦平面非均匀性校正SoC)将深入探讨红外成像系统中的关键技术——非均匀性校正SoC,以及它如何推动红外成像技术迈向新的高度。 红外成像系统…

6.Redis之String命令

1.String类型基本介绍 redis 所有的 key 都是字符串, value 的类型是存在差异的~~ 一般来说,redis 遇到乱码问题的概率更小~~ Redis 中的字符串,直接就是按照二进制数据的方式存储的. (不会做任何的编码转换【讲 mysql 的时候,知道 mysql 默认的字符集, 是拉丁文,插入中文…

Jenkins--从入门到入土

Jenkins–从入门到入土 文章目录 Jenkins--从入门到入土〇、概念提要--什么是CI/DI&#xff1f;1、CI&#xff08;Continuous Integration&#xff0c;持续集成&#xff09;2、DI&#xff08;DevOps Integration&#xff0c;DevOps 集成&#xff09;3、解决的问题 一、Jenkins安…

iOS 开发系列:基于VNRecognizeTextRequest识别图片文字

1.添加Vision Kit依赖 在项目设置中点击"General"选项卡&#xff0c;然后在"Frameworks, Libraries, and Embedded Content"&#xff08;框架、库和嵌入内容&#xff09;部分&#xff0c;点击""按钮。搜索并选择"Vision.framework"。…

[AIGC] flink sql 消费kafka消息,然后写到mysql中的demo

这是一个使用 Flink SQL 从 Kafka 中消费数据并写入 MySQL 的示例。在这个示例中&#xff0c;我们将假设有一个 Kafka 主题 “input_topic”&#xff0c;它产生格式为 (user_id: int, item_id: int, behavior: string, timestamp: long) 的数据&#xff0c;我们需要把这些数据写…

world machine学习笔记(4)

选择设备&#xff1a; select acpect&#xff1a; heading&#xff1a;太阳的方向 elevation&#xff1a;太阳的高度 select colour&#xff1a;选择颜色 select convexity&#xff1a;选择突起&#xff08;曲率&#xff09; select height&#xff1a;选择高度 falloff&a…

用常识滚雪球:拼多多的内生价值,九年的变与不变

2024年5月22日&#xff0c;拼多多公布了今年一季度财报&#xff0c;该季度拼多多集团营收868.1亿元&#xff0c;同比增长131%&#xff0c;利润306.0亿&#xff0c;同比增长了202%&#xff0c;数据亮眼。 市场对拼多多经历了“看不见”、“看不懂”、“跟不上”三个阶段。拼多多…

Vue.js条件渲染与列表渲染指南

title: Vue.js条件渲染与列表渲染指南 date: 2024/5/26 20:11:49 updated: 2024/5/26 20:11:49 categories: 前端开发 tags: VueJS前端开发数据绑定列表渲染状态管理路由配置性能优化 第1章&#xff1a;Vue.js基础与环境设置 1.1 Vue.js简介 Vue.js (读音&#xff1a;/vju…

SwiftUI中的Slider的基本使用

在SwiftUI中&#xff0c;可以使用Slider视图创建一个滑动条&#xff0c;允许用户从范围中选择一个值。通过系统提供的Slider&#xff0c;用起来也很方便。 Slider 先看一个最简单的初始化方法&#xff1a; State private var sliderValue: Float 100var body: some View {V…

[AIGC] mac os 中 .DS_Store 是什么

.DS_Store 是在 MacOS 系统中由 Finder 应用程序创建和维护的一种隐藏文件&#xff0c;用于保存有关其所在目录的自定义属性&#xff0c;例如图标位置或背景颜色。 “.DS_Store” 是 “Desktop Services Store” 的缩写。 .DS_Store 的作用 .DS_Store 文件在每个 Mac OS X 文…

ollama 使用,以及指定模型下载地址

ollama windows 使用 官网&#xff1a; https://ollama.com/ windows 指定 models 下载地址 默认会下载在C盘 &#xff0c;占用空间 在Windows系统中&#xff0c;可以通过设置环境变量OLLAMA_MODELS来指定模型文件的下载和存储路径。具体操作步骤如下&#xff1a; 1.打开系统…

【python006】miniconda3环境搭建(非root目录,最近更新中)

1.熟悉、梳理、总结项目研发实战中的Python开发日常使用中的问题。 2.欢迎点赞、关注、批评、指正&#xff0c;互三走起来&#xff0c;小手动起来&#xff01; 文章目录 1.背景介绍2. 1.背景介绍 环境移植&#xff0c;可能影响部署本机环境信息&#xff0c;探索、总结移植有效…

轻量化微调相关学习

轻量化微调&#xff08;Lightweight Fine-Tuning&#xff09;是指在大型预训练模型基础上&#xff0c;通过修改或添加少量参数来进行模型适应性调整的一种方法&#xff0c;旨在减少计算资源消耗和避免过拟合问题&#xff0c;同时保持模型的性能。这种方法特别适用于资源有限或需…