从零学Java - Stream API

Java - Stream API

文章目录

  • Java - Stream API
    • 什么是流(Stream)?
    • Stream 的特点
    • Stream使用步骤
      • 1 创建 Stream流
      • 2 中间操作
      • 3 终止操作

什么是流(Stream)?

流(Stream)与集合类似,但集合中保存的是数据,而Stream中保存对集合或数组数据的操作。

在这里插入图片描述

Stream 的特点

  • Stream 自己不会存储元素。
  • Stream 不会改变源对象。相反,他们会返回一个持有结果的新Stream。
  • Stream 操作是延迟执行的,会等到需要结果的时候才执行。

Stream使用步骤

  1. 创建:新建一个流。
  2. 中间操作:在一个或多个步骤中,将初始Stream转化到另一个Stream的中间操作。
  3. 终止操作:使用一个终止操作来产生一个结果。该操作会强制之前的延迟操作立即执行,在此之后,该Stream就不能使用了。

1 创建 Stream流

代码演示:

public class TestStream1 {public static void main(String[] args) {//新建流ArrayList<String> list = new ArrayList<>();list.add("张三");list.add("张三锋");list.add("张无极");list.add("赵梦露");list.add("张黎");list.add("田美丽");//1 通过Collection对象的stream()方法(单线程)或parallelStream()方法(多线程)。list.stream().filter(s->s.startsWith("张")).forEach(System.out::println);////2 通过Arrays类的stream()方法。int[] nums = {10,2,8,1,17,24};Arrays.stream(nums).sorted().forEach(System.out::println);////3 通过Stream接口的of()、iterate()、generate()方法。Stream.of(5,3,6,13,1,8).sorted().forEach(System.out::println);////4 通过IntStream、LongStream、DoubleStream接口中的of、range、rangeClosed方法。//生成一个0~99的数组的流(含头不含尾)IntStream.range(0,100).forEach(System.out::println);//生成一个0~100的数组的流(含头含尾)IntStream.rangeClosed(0,100).forEach(System.out::println);}
}

2 中间操作

代码演示:

public class TestStream2 {public static void main(String[] args) {ArrayList<Employee> employees = new ArrayList<>();employees.add(new Employee("张三",22,18000));employees.add(new Employee("李四",23,20000));employees.add(new Employee("王五",25,22000));employees.add(new Employee("酒玖",20,25000));employees.add(new Employee("张利",22,26000));employees.add(new Employee("壮武吉",27,30000));//1  filter、limit、skip、distinct、sorted//filter 过滤employees.stream().filter(e->e.getSalary()>=25000).forEach(System.out::println);System.out.println("------------");//limit 限制employees.stream().limit(2).forEach(System.out::println);//skip 跳过指定的元素个数System.out.println("-----");employees.stream().skip(2).limit(2).forEach(System.out::println);System.out.println("-----");//distinct: 去掉重复元素 hashcode和equalsemployees.stream().distinct().forEach(System.out::println);//sorted:排序System.out.println("----------");employees.stream().sorted((e1,e2)->Double.compare(e1.getSalary(),e2.getSalary())).forEach(System.out::println);// 2 map映射System.out.println("--------map-------");//需求:遍历所有的姓名employees.stream().map(Employee::getName).forEach(System.out::println);}static class Employee{private String name;private int age;private int salary;public Employee() {}public Employee(String name, int age, int salary) {this.name = name;this.age = age;this.salary = salary;}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;}public int getSalary() {return salary;}public void setSalary(int salary) {this.salary = salary;}@Overridepublic String toString() {return "Employee{" +"name='" + name + '\'' +", age=" + age +", salary=" + salary +'}';}}
}

3 终止操作

代码演示:

public class TestStream3 {public static void main(String[] args) {//1 forEach、min、max、countList<Integer> list=new ArrayList<>();list.add(20);list.add(18);list.add(15);list.add(22);list.add(30);//forEach 遍历元素list.stream().forEach(System.out::println);System.out.println("-------min-------");//min 最小元素//Optional: 封装元素的容器,目的避免空指针异常。Optional<Integer> optional1 = list.stream().min((o1, o2) -> o1 - o2);System.out.println(optional1.get());System.out.println("-------max-------");//min 最大元素//Optional: 封装元素的容器,目的避免空指针异常。Optional<Integer> optional2 = list.stream().max((o1, o2) -> o1 - o2);System.out.println(optional2.get());// count 元素个数System.out.println("-----count----");long count = list.stream().count();System.out.println(count);//reduce  规约,统计//统计所有元素总和System.out.println("----reduce------------");Optional<Integer> sum = list.stream().reduce((x, y) -> x + y);System.out.println(sum.get());//collect 收集//把所有的人的姓名转成List集合List<Student> students=new ArrayList<>();students.add(new Student("张三1",20,"男",100));students.add(new Student("张三2",20,"男",100));students.add(new Student("张三3",20,"男",100));students.add(new Student("张三4",20,"男",100));students.add(new Student("张三5",20,"男",100));List<String> names = students.stream().map(Student::getName).collect(Collectors.toList());System.out.println(names);}static  class Student{private String name;private int age;private String gender;private double score;public Student() {}public Student(String name, int age, String gender, double score) {this.name = name;this.age = age;this.gender = gender;this.score = score;}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;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public double getScore() {return score;}public void setScore(double score) {this.score = score;}}
}

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

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

相关文章

揭开Spring MVC的真面目

官方对于Spring MVC的描述为&#xff1a; Spring Web MVC是基于Servlet API框架构建的原始Web框架&#xff0c;从一开始就包含在Spring框架中。它的正式名称“Spring Web MVC”来自其源模块的名称&#xff08;Spring-webmvc&#xff09;&#xff0c;但它通常被称为“Spring-MVC…

数组和链表部分例题(力扣)

1.数组 1.1 合并一个数组的两个有序区间 public class MargTwo {public static void main(String[] args) {int[] arr1{1,5,6,2,4,10,11};int[] arr2new int[arr1.length];marg2(arr1,0,2,3,6,arr2);}private static void marg2(int[]arr1,int iStar,int iEnd,int jStar,int j…

Flutter 状态管理之GetX库

Flutter 状态管理之GetX 前言正文一、创建项目二、状态组件三、状态更新UI四、GetX库① 添加依赖② 局部刷新③ 全局刷新 五、源码 前言 Flutter使用的是声明式UI&#xff0c;是通过状态去更新UI组件的&#xff0c;因此我们首先就要学习状态的使用。同样为了简化原本的状态使用…

剖析组件应用市场的安装

java运维管理平台怎么支持组件的安装呢&#xff1f;怎么能够达到和应用市场一样的效果呢&#xff1f;效果图如下&#xff1a; 应用商店支持的组件列表&#xff1a; 应用商店组件的安装&#xff1a; 1.组件包的制作 1.1 组件包结构 package&#xff1a;用于存放实际组件包…

【MySQL进阶】SQL优化

文章目录 SQL 优化主键优化数据组织方式页分裂页合并主键设计原则 insert优化order by优化group by优化limit优化count优化 SQL 优化 主键优化 数据组织方式 在InnoDB存储引擎中&#xff0c;表数据都是根据主键顺序组织存放的&#xff0c;这种存储方式的表称为索引组织表 在In…

数据结构Java版(4)——链表

一、概述 链表是一种常见的数据结构&#xff0c;用于存储一系列具有相同类型的数据元素。它由多个节点组成&#xff0c;每个节点包含一个数据元素和一个指向下一个节点的指针。 链表与数组不同&#xff0c;它的节点在内存中不是连续存储的&#xff0c;而是通过每个节点中的指针…

测试C#调用OpenCvSharp和ViewFaceCore从摄像头中识别人脸

学习了基于OpenCvSharp获取摄像头数据&#xff0c;同时学习了基于ViewFaceCore的人脸识别用法&#xff0c;将这两者结合即是从摄像头中识别人脸。本文测试测试C#调用OpenCvSharp和ViewFaceCore从摄像头中识别人脸&#xff0c;并进行人脸红框标记。   新建Winform项目&#xf…

OpenSource - 文件在线预览模块(多格式转 PDF 文件)

文章目录 文件在线预览模块&#xff08;多格式转PDF文件&#xff09;现已支持格式如下界面展示运行方式接口介绍文件上传文件转 PDF文件转图片文件转SVG 参数配置其他说明项目关联关键词文档转换预览技术说明同步转换异步转换 主要技术乱码问题处理帮助文档 前端预览弹出层用法…

整除的特征及解释

整除的特征及解释 整除的含义 简单地说&#xff0c;当一个非零整数除另一个整数得到整数商而没有余数时&#xff0c;叫做整除。如62&#xff1d;3&#xff0c;就说2整除6或6能被2整除。 用数学语言描述&#xff1a;若整数b除以非零整数a&#xff0c;商为整数&#xff0c;且余…

zookeeper弱密码漏洞修复

1.连接zookeeper 进入zookeeper安装目录 bin目录下 ./zkCli.sh -server IP:21812.查看节点 ls /3.查看节点权限 getAcl /zookeeper4.设置IP权限 setAcl / ip:127.0.0.1:cdrwa,ip:10.86.30.11:cdrwazookeeper的权限不具备继承性,父子节点的权限相互独立,因此需要为每个子…

11- OpenCV:自定义线性滤波(卷积,卷积边缘)

目录 一、卷积 1、卷积概念 2、卷积如何工作 3、常见算子&#xff08;卷积核 Kenel&#xff09; 4、自定义卷积模糊 5、代码演示 二、卷积边缘 1、卷积边缘问题 2、处理边缘 3、相关的API说明 4、代码演示 一、卷积 1、卷积概念 &#xff08;1&#xff09;在OpenC…

生成当天递增唯一的流水号的几种方式

说明&#xff1a;当开发中&#xff0c;如交易、文件传输过程中的文件名&#xff0c;可能需要我们使用一串唯一的数字来锁定这一条“交互记录”&#xff0c;即流水号。 本文介绍几种生成6位递增唯一&#xff0c;且每日重置的流水号的方式。 方式一&#xff1a;使用Redis 我们…

SpringSecurity(11)——核心组件和认证流程

获取用户信息 // 获取安全上下文对象&#xff0c;就是那个保存在 ThreadLocal 里面的安全上下文对象 // 总是不为null(如果不存在&#xff0c;则创建一个authentication属性为null的empty安全上下文对象) SecurityContext securityContext SecurityContextHolder.getContext(…

微信轰炸-python实现方法

新手&#xff0c;一般都需要执行以下命令&#xff0c;用来导入对应模块 pip install -i Simple Index pynput 键盘winr进入输入cmd 执行该命令即可&#xff1a;pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pynput 打开pycharm,输入代码如下 from pynput.keybo…

AI视频智能识别技术在智慧农业大棚升级改造管理场景中的应用方案

一、需求分析 随着科技的进步和农业现代化的推进&#xff0c;智能化技术逐渐成为现代农业发展的重要支撑。农业大棚作为现代农业的重要组成部分&#xff0c;其智能化改造对于提高农业生产效率、降低成本、增加收益具有重要意义。利用先进的信息化手段来对农业大棚进行管理&…

NOC总线(2)

1. NoC的路由 在NoC交换信息时&#xff0c;需要确定从源节点到目标节点所经过的路径&#xff0c;这时就需要路由算法来确定该路径。路由算法分为静态路由算法和动态路由算法两种。 静态路由算法对于两节点之间的路径是固定的&#xff0c;结构简单&#xff0c;便于硬件实…

【算法分析与设计】二叉树的层序遍历

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;算法分析与设计 ⛺️稳中求进&#xff0c;晒太阳 题目 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xf…

idea插件开发

1&#xff0c; file-new project 如图&#xff0c;选择了安装路径&#xff0c;报错【select home directory for intellij platform plugin sdk】。&#xff08;注意是安装路径最外层的文件夹&#xff0c;不是里面的lib&#xff0c;jbr这一层级&#xff09; 2&#xff0c;点击了…

HTML前端CSS实现只显示1行或者2行、3行剩余显示省略号

想要做的效果: 文本只一行显示 /**实现思路&#xff1a;1.设置inline-block属相2.强制不换行3.固定高度4.隐藏超出部分5.显示“……”*/ {display: inline-block;white-space: nowrap; width: 100%; overflow: hidden;text-overflow:ellipsis; }文本只多行显示 /** 实现思路&…

【Java发送邮箱】spring boot 发送邮箱

导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId> </dependency> 2.在properties配置邮箱 # 发件人QQ号 spring.mail.username2508575653qq.com # QQ邮箱授权码 sp…