Stream流-流式思想概述和获取流

news/2024/5/20 4:02:54/文章来源:https://www.cnblogs.com/qihaokuan/p/16612341.html

流式思想概述

整体来看,流式思想类似于工厂车间的“生产流水线”。

 

 当需要对多个元素进行操作(特别是多步操作)的时候,考虑到性能及便利性,我们应该首先拼好一个“模型”步骤 方案,然后再按照方案去执行他

 

 

这张图中展示了过滤、映射、跳过、计数等多步操作,这是一种集合元素的处理方案,而方案就是一种“函数模 型”。图中的每一个方框都是一个“流”,调用指定的方法,可以从一个流模型转换为另一个流模型。而最右侧的数字 3是最终结果。
这里的 filter 、 map 、 skip 都是在对函数模型进行操作,集合元素并没有真正被处理。只有当终结方法 count 执行的时候,整个模型才会按照指定策略执行操作。而这得益于Lambda的延迟执行特性。
备注:“Stream流”其实是一个集合元素的函数模型,它并不是集合,也不是数据结构,其本身并不存储任何 元素(或其地址值)。

Stream(流)是一个来自数据源的元素队列

  • 元素是特定类型的对象,形成一个队列。 Java中的Stream并不会存储元素,而是按需计算。
  • 数据源 流的来源。 可以是集合,数组 等。

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

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

当使用一个流的时候,通常包括三个基本步骤:获取一个数据源(source)→ 数据转换→执行操作获取想要的结 果,每次转换原有 Stream 对象不改变,返回一个新的 Stream 对象(可以有多次转换),这就允许对其操作可以 像链条一样排列,变成一个管道

 获取流

Stream<T>是java 8新加入的最常用的流接口(这并不是一个函数时接口)是隶属于java.util.stream包下

获取一个流非常简单 有以下几个常用的方式:

所有的Collection集合都可以通过Stream默认方法获取流
default Stream<E> stream();
Stream接口的静态方法of可以获取数组对应的流
static <T> Stream<T> of(T...values)
参数是一个可变参数 那么我们就可以传递一个数组

代码:

 

public class BStream1 {public static void main(String[] args) {//把集合转换为Stream流ArrayList<String> list = new ArrayList<>();Stream<String> stream = list.stream();HashSet<String> set = new HashSet<>();Stream<String> stream1 = set.stream();HashMap<String, Stream> map = new HashMap<>();//获取键,存储到Set集合中Set<String> set1 = map.keySet();//转换为Set集合Stream<String> stream2 = set1.stream();//获取值,存储到一个Collection集合中Collection<Stream> values = map.values();Stream<Stream> stream3 = values.stream();//获取键值对(键与值的映射关系 entrySet)Set<Map.Entry<String, Stream>> entries = map.entrySet();Stream<Map.Entry<String, Stream>> stream4 = entries.stream();//把数组转换为Stream流Stream<Integer> stream5 = Stream.of(1, 2, 3, 4, 5);//可变参数可以传递数组Integer[] arr = {1,2,3,4,5};Stream<Integer> arr1 = Stream.of(arr);String[] arr2 = {"a","bb","ccc"};Stream<String> arr21 = Stream.of(arr2);}
}

 

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

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

相关文章

仓库的种类和彼此关系与Maven标准目录结构

仓库的种类和彼此关系 仓库分为三类:本地仓库,远程仓库,中央仓库 三类仓库直间的关系:在默认情况下启动一个Maven工程会从本地仓库找jar包,如果本地没有在连网状态下会从中央仓库下载jar包在公司中启动一个Maven工程会从本地仓库找jar包,本地没有会去远程仓库下jar包,如…

Fecify 自建私有化saas跨境商城系统

作为跨境的运营者,有多站需求的用户,可以通过wp,magento,fecmall等搭建多个跨境独立站,需要每个独立站单独安装,安装模板插件,配置等等,后续的管理维护比较繁琐,大多数的开源性能低下,插件安装冲突,模板调整问题等等,对于没有技术的个人和小公司,掌控难度高,很多…

# 【博学谷学习记录】超强总结,用心分享 | RabbitMQ消息的可靠性

RabbitMQ消息的可靠性消息队列在使用过程中,如何确保RabbitMQ消息的可靠性,如何确保发送的消息至少被消费一次?1.生产者消息确认 RabbitMQ提供了publisher confirm机制来避免消息发送到MQ过程中丢失。这种机制必须给每个消息指定一个唯一ID。消息发送到MQ以后,会返回一个结…

Learn Dijkstra For The Last Time

博客链接:https://www.codein.icu/learn-dijkstra/ Introduction Dijkstra 算法是用于求解非负权图单源最短路的经典算法。 市面上的大部分教程都仅仅停留在「如何实现 Dijkstra 算法」的层面。从应用角度,这当然无可厚非。但理解算法本身,也不失为一件乐事。 问自己这样几个…

自己de搭建博客记录

鸽子啊鸽子一去不复返自己de搭建博客记录因为奇奇怪怪的原因所以开始学着自己搭建一个博客了 但是估计搭好了也不会常更新,连博客园都咕了一个月了 先水水免得自己忘记了,要学的还有挺多 突然发现博客阅读量猛涨,看了下貌似是N2的插件文章被爬到各种奇怪网站了-1 参考资料 参…

The forked VM terminated without properly saying goodbye. VM crash or System.exit called?

1、maven构建报错: [INFO] BUILD FAILURE[INFO] ------------------------------------------------------------------------[INFO] Total time: 47.849 s[INFO] Finished at: 2022-08-19T08:05:22+08:00[INFO] ----------------------------------------------------------…

阿里云 EMAS Serverless 重磅发布

EMAS Serverless重磅发布, 为应用开发者特别是多端开发者实现一站式应用开发提供了全新的开发体验。为了更好的布道推广 Serverless 开发生态,现面向开发者/学生提供免费套餐(不是只1个月哦,你懂的),针对业务发展的不同阶段,提供多种套餐和按量付费模式,请来阿里云官网…

Windows安全加固

实验环境 操作系统:Windows Server 2012 系统密码: 安全加固项 1、用户系统 1.1 加固项名称: Administrator账户停用 加固说明: 防止 Administrator 账户被黑客爆破出密码,避免Administrator账户被黑客利用获取计算机系统权限。只有一个管理员账户时无法禁用,需要创建另一…

WPF实现一个简单自定义管道

先看效果 xaml代码 <UserControl x:Class="WPF控件测试.Control.Pipeline" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" …

获取数的全部因子 单次查询/预处理

对于单次查询,可以直接用sqrt(n)遍历。 对于多次查询,每次都遍历会遍历多个无用的数。 可以采用打表法,直接获取数据范围内的全部数据的因子。 代码如下:int N = 100010; vector<int> factor[100010]; for (int i = 1; i <= N; i++) {for(int j=i;j<=N;j+=i)fa…

漫谈测试成长之探索——缺陷分析

​ 回顾校园生活中,我们参加每一场考试后都会对错题进行分析总结并补缺补漏,以便能更好地去应对更重要的考试。回到软件系统开发中,我们记录和跟踪缺陷的目的是什么,仅仅是为了在软件系统开发过程中跟踪Bug直至修复么?应该不止于此。我们也可以对项目缺陷进行分析,分析其…

SpringBoot读取.yml配置文件最常见的两种方式-源码及其在nacos的应用

一、前言 我们在开发中会经常遇到一些可能会变的值,比如数据库的密码,一些关键链接的配置等等。 都需要我们写在配置文件中,这样可以把这些配置文件放到nacos上进行管理,修改nacos的配置,咱们发布的包就可以动态的进行更新了,不需要重新修改打包在重新发包! 咱们今天就来…

数据结构开门篇

数据结构 1、什么是数据结构 数据结构是数据组织、管理和存储格式,其使用目的是为了高效地访问和修改数据2、时间复杂度和空间复杂度 什么是时间复杂度 时间复杂度是对一个算法运行时间长短的度量,用大O表示,记作 T(n)=O(f(n))如果运行时间是常数量级,则用常数1表示 只保留…

小红书数据 小红书爬虫 小红书接口 xhs

小红书数据 小红书接口 小红书api(小红书爬虫 xhs xiaohongshu 红书) 最新小红书APP接口稳定运行,主流接口都已部署,支持并发请求! 只抓取公开数据供作学习用途,不做引流上赞上粉业务,如有侵权,联系删除,谢谢! 只提供数据支持,不交流方案! 联系加q 2126851589! Git…

记一次有意思的 SQL 实现 → 分组后取每组的第一条记录

开心一刻今天,朋友气冲冲的走到我面前朋友:我不是谈了个女朋友,谈了三个月嘛,昨天我偷看她手机,你猜她给我备注什么我:备注什么?朋友:舔狗 2 号!我一听,气就上来了,说道:走,找她去,这婆娘确实该骂,臭不要脸的朋友拉住我,劝到:哎哎,不是去骂她,是找她理论,叫…

JavaIO流

JavaIO流 一、流的概念 内存与存储设备之间传输数据的通道。例如在内存中的程序,想要读取硬盘中的文件,必须借助流;在水库中的水流入家庭中(存储设备到内存) 二、流的分类 按方向: 输入流:将存储设备中的内容读入到内存中 输出流:将内存中的内容写入到存储设备中 流入程…

Oracle 序列学习与使用总结

Oracle序列学习与使用总结 by:授客 QQ:1033553122 简述 序列是oracle提供的用于生成一系列数字的数据库对象,序列会自动生成顺序递增的序列号,可用于提供唯一的自动递增主键。序列和视图一样,并不占用实际的存储空间,只是在数据字典中保存他的定义信息。 创建序列 当创建序…

JavaScript快速入门-04-运算符

4 运算符 4.1 算术运算符 4.1.1 概述JavaScript 提供的算术运算符如下所示:类型 符号 示例加法运算符 + a+b减法运算符 - a-b乘法运算符 * a*b除法运算符 / a/b余数运算符 % a%b自增运算符 ++ ++a/a++自减运算符 -- --a/a--指数运算符 ** a**b4.1.2 加法运算符加法运算符是最常…

电脑棒没有显示器解决方案

因为我的工作电脑是一个电脑棒(见下图),没有自带的显示屏,所以只能通过远程控制。但是据说TeamViewer可能会误判为商业使用(之后就不让你免费了),于是我就打算转ToDesk。刚开始,这个东西开机能够自启动,但是就是无法连接到服务器😓 (上图这玩意儿就是电脑棒) 之后…