Java8 Stream流

news2025/1/16 8:45:29

目录

  • Java8 Stream流
    • 一、Stream概述
    • 二、Stream 的创建(4种方式)
    • 参考地址(表示感谢):

Java8 Stream流

一、Stream概述

  • Stream API说明

    • Java8中有两大最为重要的改变。第一个是 Lambda 表达式;另外一个则是 Stream API
    • Stream API (java.util.stream) 把真正的函数式编程风格引入到Java中。正是因为他的出现,lambda出现的频率才更多了一点。
  • Stream API作用

    实际开发中,项目中多数数据源都来自于Mysql,Oracle等。但现在数据源可以更多了,有MongDB,Redis等,而这些NoSQL的数据就需要Java层面去处理。这时候就可以用stream来对返回的集合数据进行复杂的操作,例如分页、筛选、去重等等…

  • Stream 和 Collection 集合的区别

    • Collection 是一种静态的内存数据结构,而 Stream 是有关计算的。前者是主要面向内存,存储在内存中,后者主要是面向 CPU,通过 CPU 实现计算。
  • Stream 操作分为三个步骤

    • 1、创建 Stream:通过数据源(如:集合、数组),获取一个流
    • 2、中间操作:对数据源的数据进行处理,处理可能是执行很多操作,所以形成了一个操作链。
    • 3、终止操作(终端操作) 一旦执行终止操作,就执行中间操作链,并产生结果。
      在这里插入图片描述
  • 注意

    • Stream是流,自己不会存储元素,而是按照特定的规则对数据进行计算,一般会输出结果。
    • Stream 不会改变源对象。相反,他们会返回一个持有结果的新Stream、或者新的集合。
    • stream具有延迟执行特性,只有调用终端操作时,中间操作才会执行
    • stream是流,一旦执行终止操作,就关流了,所以就不允许再对流进行操作了,否则直接报错,但是可以对流计算出来的结果进行操作。

二、Stream 的创建(4种方式)

  • 创建 Stream方式一:通过集合

    Java8 中的 Collection 接口被扩展,提供了两个获取流的方法:

    • default Stream< E> stream() : 返回一个顺序流
    • default Stream< E> parallelStream() : 返回一个并行流
    List<String> list = Arrays.asList("a", "b", "c");
    
    // 创建顺序流的两种方式
    Stream<String> stream = list.stream();
    Stream<String> sequential = list.stream().sequential();
    
    // 创建一个并行流的两种方式
    Stream<String> parallel = list.stream().parallel();
    Stream<String> stringStream = list.parallelStream();
    
    
  • 创建 Stream方式二:通过数组

    Java8 中的 Arrays 的静态方法 stream() 可以获取数组流:

    • static < T> Stream< T> stream(T[] array): 返回一个流

      重载形式,能够处理对应基本类型的数组:

    • public static IntStream stream(int[] array)

    • public static LongStream stream(long[] array)

    • public static DoubleStream stream(double[] array);

    int[] array = {1,3,5,6,8};
    IntStream stream = Arrays.stream(array);
    
    
  • 创建 Stream方式三:通过Stream的of()

    可以调用Stream类静态方法 of(), 通过显示值创建一个流。它可以接收任意数量的参数。

    • public static< T> Stream< T> of(T... values) : 返回一个流
    Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5, 6);
    
    
  • 创建 Stream方式四:创建无限流

    可以使用静态方法 Stream.iterate() 和 Stream.generate(), 创建无限流。

    • 迭代:public static<T> Stream<T> iterate(final T seed, final UnaryOperator<T> f)
    • 生成:public static<T> Stream<T> generate(Supplier<T> s)
    public static void main(String[] args) {
        // 迭代
        // public static<T> Stream<T> iterate(final T seed, final UnaryOperator<T> f)
        Stream<Integer> stream = Stream.iterate(0, x -> x + 2);
        stream.limit(10).forEach(System.out::println);
    
        // 生成
        // public static<T> Stream<T> generate(Supplier<T> s)
        Stream<Double> stream1 = Stream.generate(Math::random);
        stream1.limit(10).forEach(System.out::println);
    }
    
    

参考地址(表示感谢):

https://blog.csdn.net/weixin_43888891/article/details/124657128

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

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

相关文章

Gradle Plugin的开发及发布

Gradle Plugin的开发及发布前言插件的开发学习阶段&#xff08;build.gradle脚本&#xff09;开发阶段&#xff08;buildSrc&#xff09;PluginTaskExtension发布阶段&#xff08;独立module&#xff09;发布到本地发布到MavenCentral准备sonatype账号创建pgp证书配置sonatype和…

数据结构与算法基础(王卓)(6):带尾指针(单向)循环链表的合并;双链表及其插入和删除的详细操作

带尾指针&#xff08;单向&#xff09;循环链表的合并 PPT(157)&#xff1a; 操作前初始设定预设的条件​​​​我们要做的&#xff0c;即&#xff1a; 让A表尾节点指向B表首结点&#xff0c;让B表尾节点指向A表首结点&#xff1a; Project 1&#xff1a; Status 合并链表(…

NVIDIA NCCL 源码学习(九)- 单机内ncclSend和ncclRecv的过程

上节介绍了通信链路的建立过程&#xff0c;本节介绍下单机内部ncclSend和ncclRecv的运行过程。 单机内的通信都是通过kernel来进行的&#xff0c;所以整个通信的过程可以分为两步&#xff0c;第一步是准备kernel相关的参数&#xff0c;第二步是实际执行kernel的过程。 为方便…

闯关(贪心)

某综艺频道推出了一个闯关活动。 活动一共包含 n 个关卡&#xff08;编号 1∼n&#xff09;&#xff0c;其中 m 个关卡为特殊关卡。 每个关卡都有一个通关分数&#xff0c;其中第 i 个关卡的通关分数为 ai。 挑战者可以自由决定所有关卡的具体挑战顺序&#xff0c;并且每通过…

【工具类】Elasticsearch的HTTP客户端(Java)

一、介绍 1. 原理 Java基于Http请求操作ES&#xff0c;与Kibana上的操作一致。 Kibana上的dsl与Http的关系&#xff1a; GET、POST等同于HTTP的POSTPUT 等同于HTTP的PUTDELETE 等同于HTTP的DELETE 如图 该DSL可转化为HTTP请求 POST ip:port/docwrite/_search 请求体为&…

Mysql online DDL工具:gh-ost

gh-ost特点&#xff1a; 1、不使用触发器。 在gh-ost出现之前第三方MySQL DDL工具均采用触发器的方式进行实现&#xff0c;包括前面percona的pt-osc&#xff0c;Facebook的OSC等等。而gh-ost采用的机制和他们完全不同&#xff1a;它通过MySQL binlog来同步数据。 gh-ost会伪装…

PowerToys 微软效率工具包 使用指南

PowerToys 微软效率工具包 使用教程 Microsoft PowerToys 是一组实用程序&#xff0c;供高级用户调整和简化其 Windows 10 和 11 体验以提高工作效率。 下载 PowerToys⇲ 安装教程 1.双击文件运行 点击我同意 2.等待下载安装完成 3.安装完成 使用指南 Always on Top 通…

FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D)

本教程将在Unity3D中混合Optitrack与数据手套的数据流&#xff0c;在人体运动的基础上&#xff0c;添加双手手指部分的运动。 双手手背的角度仍由Optitrack提供&#xff0c;数据手套提供双手手指的角度。 01 客户端软件 分别安装MotiveBody与MotionVenus并校准人体与数据…

Kafka-Topic创建源码分析

Kafka-Topic创建源码分析 在kafka中,创建topic通过使用kafka-topics.sh脚本或者直接调用AdminClient对外提供的adminApi来进行创建. 即使是使用kafka-topics.sh&#xff0c;其最终会通过生成并调用AdminClient来进行处理. 0,创建topic流程图 1,创建topic示例代码 通过引入A…

工作两年半,终于学会了Jenkins部署Maven项目

上期我们讲了Linux部署Jenkins Linux安装Jenkins&#xff08;Java11最新版&#xff09; 这期我们来讲的是使用Jenkins部署一个maven项目 文章目录&#x1f46e;所需要的环境&#xff08;必须要有&#xff0c;否则不能进行下一步&#xff09;&#x1f64b;第一步&#xff0c;安装…

02 运算符

目录 第一章&#xff1a;概述 第二章&#xff1a;算术运算符 2.1 概述 2.2 应用示例 2.3 号的两种用法 2.4 自增自减运算 2.4.1 概述 2.4.2 单独使用 2.4.3 复合使用 第三章&#xff1a;赋值运算符 3.1 概述 3.2 应用示例 第四章&#xff1a;关系运算符&#xff0…

vue3.0找不到模块“./App.vue”或其相应的类型声明

vue3报错提示 找不到模块“/App.vue”或其相应的类型声明 情况一、vue3.0js 报错原因&#xff1a;javascript只能理解.js文件&#xff0c;无法理解.vue文件。 解决方案&#xff1a;根目录新建jsconfig.json {"compilerOptions": {"baseUrl": "./&qu…

被取消的AP考试到底是什么嘞?

最近&#xff0c;好多考试都延期或取消了&#xff0c;美国大学理事会&#xff08;College Board&#xff09;也发布公告&#xff0c;宣布受疫情影响&#xff0c;上海、北京等地的AP考试正式取消&#xff0c;不提供线上考试的机会&#xff0c;而且不会安排后续补考。 这条消息惊…

芯片漫游指南(5)-- UVM寄存器

目录1.寄存器模型概览1.1 概述1.2 uvm_reg相关概念1.3 MCDF寄存器模型1.4 寄存器建模1.5 模型使用流程2.寄存器模型集成2.1 总线UVC的实现2.2 纵向UVC的示例3.寄存器模型的常规方法3.1 mirror、desired和actual value3.2 prediction的分类3.3 uvm_reg的访问方法3.4 mem与reg的联…

python扩展实现方法--python与c混和编程

大部分的Python的扩展都是用C语言写的&#xff0c;但也很容易移植到C中。 一般来说&#xff0c;所有能被整合或者导入到其它python脚本的代码&#xff0c;都可以称为扩展。 扩展可以用纯Python来写&#xff0c;也可以用C或者C之类的编译型的语言来扩展。 就算是相同的架构的两…

Spring Boot学习篇(三)之通用mapper的使用(oracle版)

Spring Boot学习篇(三)之通用mapper的使用(oracle版) 1 配置pom.xml <parent><artifactId>spring-boot-starter-parent</artifactId><groupId>org.springframework.boot</groupId><version>2.7.2</version></parent> <de…

概念辨析|电子文件单轨制与电子档案单套制

电子文件单轨制和电子档案单套制是档案业务中的重要概念&#xff0c;在建设数字中国的时代背景下&#xff0c;厘清“套”与“轨”的区别和联系是革新档案工作的基础 产生背景 随着信息技术的不断发展和政务信息化的持续推进&#xff0c;电子文件逐渐在业务工作中大量出现&…

从工具到实践:如何在GitHub上保障开源项目安全?

1998年&#xff0c;Christine Peterson创造了 “开源软件”这个词。她解释道&#xff1a;“这是刻意为之&#xff0c;为了让其他人更容易理解这个领域”。同年&#xff0c;O’Reilly组织了首届“开源峰会”。 开源软件受到更多人青睐原因在于&#xff0c;用户对软件拥有更多的…

【圣诞节】简单代码实现圣诞树|圣诞贺卡 | 快来为心爱的她送上专属的圣诞礼物叭~

圣诞节马上就要到了&#xff0c;不知道给自己喜欢的人准备什么样的惊喜吗&#xff1f;作为一名程序员&#xff0c;当然是用编程制作专属于她or他的圣诞树&#xff01; 目录 &#x1f384;圣诞树 ✨3D圣诞树 代码块 打开方式 修改位置 效果展示 ✨音乐律动圣诞树 代码块…

详解 Vue 过渡 transition 动画 animation 并结合第三方库 animation.css 和 gsap

transition vue过渡组件 标签自带类名 触发时机默认类名 自定义类名 <transition name"xxx"> 自定义行内式类名 方便结合第三方库 transition 钩子 接收参数el enter 和leave 第二个参数 done 可以 决定 after-enter after-leave 的 周期内的执行时机 v-…