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模型的使用案例及原理解析

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

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

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

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

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

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安…

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…

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

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

【九十四】【算法分析与设计】练习四蛮力法练习,排列问题和组合问题,求解最大连续子序列和问题,求解幂集问题,求解0/1背包问题,求解任务分配问题

求解最大连续子序列和问题 给定一个有n&#xff08;n≥1&#xff09;个整数的序列&#xff0c;要求求出其中最大连续子序列的和。 例如&#xff1a; 序列&#xff08;-2&#xff0c;11&#xff0c;-4&#xff0c;13&#xff0c;-5&#xff0c;-2&#xff09;的最大子序列和为20…

第 33 次CCF认证

1. 词频统计 题目描述 样例输入 代码 #include <bits/stdc.h>using namespace std;int main() {int n,m;cin>>n>>m;vector<int> ans1(m,0),ans2(m,0);while (n --) {int t;cin>>t;vector<int> vis(m1,0);for (int i 1;i < t;i ) {i…

数据结构(五)

数据结构&#xff08;五&#xff09; 常见的排序算法内部排序交换插入选择归并基数 外部排序基于归并的 常见的排序算法 内部排序 交换 冒泡&#xff1a;每一次运行总会将最小的或者最大的放到前面&#xff0c;如果需要交换&#xff0c;一直在交换 快速排序*&#xff1a;经过…

2024最新前端面试八股文【基础篇293题】

⼀、HTML、HTTP、web综合问题 1 前端需要注意哪些SEO 2 <img> 的 title 和 alt 有什么区别 3 HTTP的⼏种请求⽅法⽤途 4 从浏览器地址栏输⼊url到显示⻚⾯的步骤 5 如何进⾏⽹站性能优化 6 HTTP状态码及其含义 7 语义化的理解 8 介绍⼀下你对浏览器内核的理解 9 …

【操作系统】发展与分类(手工操作、批处理、分时操作、实时操作)

2.操作系统发展与分类 思维导图 手工操作阶段&#xff08;此阶段无操作系统&#xff09; 需要人工干预 缺点&#xff1a; 1.用户独占全机&#xff0c;资源利用率低&#xff1b; 2.CPU等待手工操作&#xff0c;CPU利用不充分。 批处理阶段&#xff08;操作系统开始出现&#x…

正运动控制器:视觉纠偏和找孔

一、用户主界面CCD参数设置 通过主界面CCD参数设置&#xff0c;学习如何操作计算相机中心与电批中心的偏移量&#xff0c;以及相机标定的功能。 1、相机中心与电批中心的偏移量计算 1.1、在用户主界面点击CCD参数按钮&#xff0c;进入CCD设置界面。 主界面 CCD参数设置界面 1…

制作电子画册速成攻略,快来试试

​当今社会&#xff0c;数字媒体日益普及&#xff0c;电子画册作为一种崭新的展示方式&#xff0c;受到了越来越多人的青睐。它不仅形式新颖&#xff0c;互动性强&#xff0c;而且制作起来也并不复杂。想知道如何快速掌握制作电子画册的技巧吗&#xff1f;我来教你吧。 接下来&…

推荐13款常用的Vscode插件,提高前端日常开发效率

1. Live Server Live Server 插件是一个用于前端开发的扩展&#xff0c;它的主要作用是提供一个本地开发服务器&#xff0c;以便实时预览和调试网页应用程序。其最大特点在于热重载&#xff0c;即开发者可实时预览代码效果。 因为Live Server 允许开发者在浏览器中实时预览您正…

Llama 3没能逼出GPT-5!OpenAI怒“卷”To B战场,新企业级 AI 功能重磅推出!

Meta 是本周当之无愧的AI巨星&#xff01;刚刚推出的 Llama 3 凭借着强大的性能和开源生态的优势在 LLM 排行榜上迅速跃升。 按理说&#xff0c;Llama 3在开源的状态下做到了 GPT-3.7 的水平&#xff0c;必然会显得用户&#xff08;尤其是企业用户&#xff0c;他们更具备独立部…