JAVA基础-Stream流

引言

        Java 8 版本新增的Stream,配合同版本出现的Lambda ,给我们操作集合(Collection)提供了极大的 便利。Stream流是JDK8新增的成员,允许以声明性方式处理数据集合,可以把Stream流看作是遍历数据集 合的一个高级迭代器。Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操 作,可以执行非常复杂的查找/筛选/过滤、排序、聚合和映射数据等操作。使用Stream API 对集合数据进行 操作,就类似于使用 SQL 执行的数据库查询。也可以使用 Stream API 来并行执行操作。

         简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。

一,Stream流的特性

        Stream(流)是一个来自数据源的元素队列并支持聚合操作:

  • 元素是特定类型的对象,形成一个队列。 Java中的Stream并不会存储元素,而是按需计算。
  • 数据源 流的来源。 可以是集合,数组,I/O channel, 产生器generator 等。
  • 聚合操作 类似SQL语句一样的操作, 比如filter, map, reduce, find, match, sorted等。

        和以前的Collection操作不同, Stream操作还有两个基础的特征:

  • Pipelining: 中间操作都会返回流对象本身。 这样多个操作可以串联成一个管道, 如同流式风格 (fluent style)。 这样做可以对操作进行优化, 比如延迟执行(laziness)和短路(short-circuiting)。
  • 内部迭代: 以前对集合遍历都是通过Iterator或者For-Each的方式, 显式的在集合外部进行迭代, 这叫做外部迭代。 Stream提供了内部迭代的方式, 通过访问者模式(Visitor)实现。

        Stream可以由数组或集合创建,对流的操作分为两种:

1:中间操作,每次返回一个新的流,可以有多个

2:终端操作,每个流只能进行一次终端操作,终端操作结束后流无法再次使用。终端操作会产生一个新 的集合或值。

特性:

  • 不是数据结构,不会保存数据。
  • 不会修改原来的数据源,它会将操作后的数据保存到另外一个对象中。(保留意见:毕竟peek方法可 以修改流中元素)
  • 惰性求值,流在中间处理过程中,只是对操作进行了记录,并不会立即执行,需要等到执行终止操作 的时候才会进行实际的计算

二,Stream流的具体操作

2.1,Stream的创建

示例代码:
 

        //List集合List<String> list = Arrays.asList("a", "b", "c");// 创建一个顺序流(串行流)Stream<String> stream = list.stream();// 创建一个(并行流)(用于多线程)Stream<String> parallelStream = list.parallelStream();//使用数组创建int[] array={1,3,5,6,8};IntStream stream = Arrays.stream(array);

2.2,Stream流的常用方法:of()、generate(),iterate()

2.2.1,of()方法

        为给定元素创建顺序流:

示例代码:

        Stream<Integer> is=Stream.of(5,4,8,66,2,3);is.forEach(System.out::println);

输出结果:

2.2.2,generate()方法

         返回一个无限连续的无序流,其中每个元素由提供的供应商(Supplier)生成。generate方法用于生成常量流和随机元素流。

示例代码:

        Stream<Double> is=Stream.generate(Math::random).limit(4);is.forEach(System.out::println);

输出结果:

2.2.3,iterate()方法

        可以用来生成一个包含无限个元素的流。iterate的两个参数,第一个参数是新流中的初始元素,然后使用该数据做第二个参数也就是UnaryOperator函数的入参去计算第二元素,然后把新计算得到的第二个元素作为入参继续计算第三个元素,以此循环可以制造无限个元素。

示例代码:

        Stream<Integer> is=Stream.iterate(0,(e)->e+3).limit(5);is.forEach(System.out::println);

输出结果:

 2.3,Stream流的使用

 示例代码:

        //1-100以内素数的和int su=IntStream.rangeClosed(1,100).filter(e->{for (int i = 2; i < e; i++) {if (e%i==0){return false;}}return true;}).sum();System.out.println(su);

输出结果:

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

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

相关文章

java多线程常见面试题

1、线程和进程的区别 本质区别&#xff1a; 进程是一个程序的实例&#xff0c;是操作系统资源分配的最小单位&#xff1b;&#xff0c;是任务调度与执行的最小单位包含关系&#xff1a; 进程至少由一个线程组成&#xff0c;线程可看做轻量级进程资源开销&#xff1a; 进程有自…

通用文字识别OCR 之实现自动化办公

摘要 随着技术的发展&#xff0c;通用文字识别&#xff08;OCR&#xff09;已经成为现代办公环境中不可或缺的工具之一。OCR技术可以将印刷或手写文本转换为可编辑或可搜索的数字文本&#xff0c;极大地提高了办公效率并实现了自动化办公。本文将深入探讨OCR技术在实现自动化办…

NLP_文本去重_附Python实现【MinHash和MinHashLSH】算法

NLP_文本去重_附Python实现【MinHash和MinHashLSH】算法 前言代码的实现【注释丰富】 前言 大规模的文本去重是目前比较热门的一个技术&#xff0c;由于大模型的兴起&#xff0c;更多的高质量数据集也是大家迫切需要的。 关于如何进行文本去重&#xff1f; 直观的方法首先是利…

一百三十五、Azkaban——AzkabanWebServer服务开启后秒退

一、问题 Azkaban的AzkabanWebServer服务开启后秒退&#xff0c;造成Azkaban的页面登录不上 AzkabanWebServer服务开启后&#xff0c;第一个jps里面有AzkabanWebServer&#xff0c;随后第二个jps里面没有AzkabanWebServer 二、问题原因 MySQL中azkaban数据库的表executors的…

【ARMv8/v9 异常模型入门及渐进 13 -- ARM Linux 系统调用流程分析】

文章目录 1.1 SYSCALL 过程调用规范1.1.1 系统调用流程概括1.1.2 ARMv7 系统调用中断处理 上篇文章&#xff1a;ARMv8/v9 异常模型入门及渐进 12 – ARM Linux 用户栈和系统栈及 CURRENT宏 介绍 1.1 SYSCALL 过程调用规范 当进程因为中断或者系统调用陷入到内核态时&#xff0…

Spring,SpringBoot,Spring MVC的区别是什么

1.Spring是什么 我们通常所说的 Spring 指的是 Spring Framework&#xff08;Spring 框架&#xff09;&#xff0c;它是⼀个开源框架&#xff0c;有着活跃⽽庞⼤的社区&#xff0c;这就是它之所以能⻓久不衰的原因。Spring ⽀持⼴泛的应⽤场景&#xff0c;它可以让 Java 企业级…

遇到了一个存在XSS(存储型)漏洞的网站

第一个漏洞self xss&#xff08;存储型&#xff09; 存在漏洞的网站是https://www.kuangstudy.com/ 然后点击个人设置 在编辑主页中&#xff0c;我们可以用最简单的script语句进行注入&#xff0c;提交&#xff1b; 出现弹窗&#xff0c;说明它已经把代码进行解析&#x…

java8里如何使用流?《Java8 实战》读书笔记 第 5 章 使用流

目录 第 5 章 使用流5.1 筛选和切片5.1.1 用谓词筛选&#xff08;filter&#xff09;5.1.2 筛选各异的元素&#xff08;distinct&#xff09;5.1.3 截短流&#xff08;limit&#xff09;5.1.4 跳过元素&#xff08;skip&#xff09; 5.2 映射&#xff08;map&#xff0c;fl…

JavaScript常见高级知识点

目录 防抖节流高阶函数函数柯里化数组去重set去重filter去重includes去重 数组扁平化深拷贝getBoundingCilentRectIntersectionObserver自定义事件 防抖 防抖是一种常用的技术手段&#xff0c;在JavaScript中特别常见。它的作用是控制某些高频率触发的事件&#xff0c;在一定时…

RocketMQ消息过滤Tag标签

生产者在封装Message消息时可以传入tag参数&#xff0c;消费者在进行消费时可以进行订阅主题时可以进行tag过滤,代码示例如下. //生产者 public class Producer {public static void main(String[] args) throws Exception{DefaultMQProducer producer new DefaultMQProducer(…

LLM - Chinese-Llama-2-7b 初体验

目录 一.引言 二.模型下载 三.快速测试 四.训练数据 五.总结 一.引言 自打 LLama-2 发布后就一直在等大佬们发布 LLama-2 的适配中文版&#xff0c;也是这几天蹲到了一版由 LinkSoul 发布的 Chinese-Llama-2-7b&#xff0c;其共发布了一个常规版本和一个 4-bit 的量化版本…

Linux命令行宝典:随时查询、轻松应对

&#x1f57a;作者&#xff1a; 迷茫的启明星 学习路线C语言从0到1C初阶数据结构从0到1 &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的很重要&…

Ama no Jaku

登录—专业IT笔试面试备考平台_牛客网 题目大意&#xff1a;有一个n*n且仅由0和1构成的矩阵&#xff0c;每次操作可以将一整行或一整列的所有数取反&#xff0c;问能否使所有行中构成的最小数>所有列中构成的最大数 1<n<2000 思路&#xff1a;首先&#xff0c;如果…

H2TEST自动化测试

ref&#xff1a; GitHub - kunyi0605/H2testwpywinauto实战-操作h2testw.exe自动化测试脚本_肤白貌美的博客-CSDN博客 https://www.cnblogs.com/qican/p/15038067.html

Flink CEP (一)原理及概念

目录 1.Flink CEP 原理 2.Flink API开发 2.1 模式 pattern 2.2 模式 pattern属性 2.3 模式间的关系 1.Flink CEP 原理 Flink CEP内部是用NFA&#xff08;非确定有限自动机&#xff09;来实现的&#xff0c;由点和边组成的一个状态图&#xff0c;以一个初始状态作为起点&am…

文件共享服务器(五)sicis

目录 前言 一、概述 1.iscsi概念 2.iscsi介绍 3.相关名词 二、实验 1.构建iscsi服务 2.实现步骤 服务器端 客户端 3.注意事项 总结 前言 iSCSI是由IBM发明的基于以太网的存储协议&#xff0c;该协议与SUN的NFS协议都是为了解决存储资源共享问题的解决方案。两者意图…

git rebase -i

git rebase -i 是一种交互式的 rebase 方式&#xff0c;其中 -i 是 --interactive 的简写。这种方式允许你修改一系列的 commit 信息&#xff0c;在 rebase 过程中有选择地选择、编辑或者合并 commit。 在执行 git rebase -i 命令时&#xff0c;你需要提供一个参数&#xff0c…

音视频——封装格式原理

视频解码基础 一、封裝格式 ​ 我们播放的视频文件一般都是用一种封装格式封装起来的&#xff0c;封装格式的作用是什么呢&#xff1f;一般视频文件里不光有视频&#xff0c;还有音频&#xff0c;封装格式的作用就是把视频和音频打包起来。 所以我们先要解封装格式&#xff0…

集成学习Boosting - AdaBoost

目录 1. Boosting方法的基本思想 1.1 Bagging VS Boosting 1.2 Boosting算法的基本元素与基本流程 1.3 sklearn中的Boosting算法 2. AdaBoost 3 AdaBoost的基本参数与损失函数 3.1 参数 base_estimator&#xff0c;属性base_estimator_与estimators_ 3.1. 参数 learnin…

vue之vue-pboc组件

功能描述 PBOC业务页面基类组件,提供多个PBOC操作方法,,它的父级组件为vue-base #方法 查询电子现金余额及电子现金上限 queryElecBalance(); 查询电子现金明细 queryElecDetail(); pboc初始化过程接口 initDeviceInfo: function initDeviceInfo( appid, acctype, tranty…