流式思想概述和两种获取Stream流的方式
流式思想概述
整体来看,流式思想类似于工厂车间的生产流水线
当需要对多个元素进行操作(特别是多步操作)的时候,考虑到性能及便利性,我们应该首先拼好一个模型步骤方案,然后再按照方法去执行他

这张图中展示了过滤、映射、跳过、计数等多步操作,这是一种集合元素的处理方案,而方案就是一种函数模型。途中每一个方框都是一个流,调用指定的方法,可以从一个流模型转换为另外一个流模型。而最右侧的数字3式最终结果。
这里的filter、map、skil都是再对函数模型进行操作,集合元素并没有真的呗处理。只有当终结方法count执行的时候,整个模型才会按照指定策略执行操作,而这得益于Lambda的延迟执行特性。
备注:Stream流其实是一个集合元素的函数模型,它并不是集合,也不是数据结构,其本身不存储任何元素(或其地址值)。
Stream流是一个来自数据源的元素队列
元素式特定类型的对象,形成一个队列。java中的Stream并不会存储元素,而是按需计算
数据源 流的来源。可以是集合,数组等。
和以前的Collection操作不同,Stream操作还有两个基础的特征:
Pipelining:中间操作都会返回流本身对象。这样多个操作可以串联成一个通道,如同流式风格(fluentstyle)。这样做可以对操作进行优化,比如延迟执行和短路
内部迭代:以前对集合遍历都是通过iterator或者增强for的方式,显示的再集合外部进行迭代,这叫做外部迭代。Stream提供了内部迭代的方式,流可以直接调用遍历方法
当使用一个流的时候,通常包括三个基本步骤:获取一个数据源->数据转换->执行操作获取想要的结果,每次转换原有的Stream对象不改变,返回一个新的Stream对象,这就允许对其操作可以像链条一样排列,变成一个通道
两种获取Stream流的方式
java.util.stream.Stream是java8新加入的最常用的流接口。(这并不是一个接口)
获取一个流非常的简单,有以下集中常用的方式
所有的Collection集合都可以通过stream默认方法获取流
default Stream steream();
Stream接口的静态方法of可以获取数组对应的流
static Stream of (T... values)
参数是一个可变的参数,那我们就可以传递一个数组
package com.yang.Test.StreamStudy;
import java.util.*;
import java.util.stream.Stream;
/**
* 获取一个流非常的简单,有以下集中常用的方式
* 所有的Collection集合都可以通过stream默认方法获取流
* default Stream<E> steream();
* Stream接口的静态方法of可以获取数组对应的流
* static<T> Stream<T> of (T... values)
*/
public class StreamStudy02 {
public static void main(String[] args) {
//把集合转换为Stream流
ArrayList<String> arrayList = new ArrayList<>();
Stream<String> stream1 = arrayList.stream();
HashSet<String> hashSet = new HashSet<>();
Stream<String> stream2 = hashSet.stream();
HashMap<String, String> hashMap = new HashMap<>();
//获取键存储到一个Set集合中
Set<String> keySet = hashMap.keySet();
Stream<String> stream3 = keySet.stream();
//获取值,存储到一个Collection集合中
Collection<String> values = hashMap.values();
Stream<String> stream4 = values.stream();
//获取键值对(键与值的映射关系 entrySet)
Set<Map.Entry<String, String>> entries = hashMap.entrySet();
Stream<Map.Entry<String, String>> stream5 = entries.stream();
//把数组转换为Stream流
Stream<Integer> integerStream1 = Stream.of(1, 2, 3, 4, 5);
//可变的参数可以传递数组
Integer[] arr = {4,5,6,7};
Stream<Integer> integerStream2 = Stream.of(arr);
String[] arr2 = {"你好","啦啦啦啦"};
Stream<String> stringStream = Stream.of(arr2);
}
}
流式思想概述和两种获取Stream流的方式的更多相关文章
- 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第3节 两种获取Stream流的方式_11_练习:集合元素处理(Stream方式)
- 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第2节 Stream流式思想概述_3_流式思想概述
- Java流式思想和方法引用
目录 Java流式思想和方法引用 1. Stream流 1.1 概述 传统集合的多步遍历代码 Stream的更优写法 1.2 流式思想的概述 1.3 获取流 1.4 常用方法 ①逐一处理:forEac ...
- Java8新特性 Stream流式思想(二)
如何获取Stream流刚开始写博客,有一些不到位的地方,还请各位论坛大佬见谅,谢谢! package cn.com.zq.demo01.Stream.test01.Stream; import org ...
- Java学习:Stream流式思想
Stream流 Java 8 API添加了一种新的机制——Stream(流).Stream和IO流不是一回事. 流式思想:像生产流水线一样,一个操作接一个操作. 使用Stream流的步骤:数据源→转换 ...
- NSStream 流式思想
流式思想的本质是将数据或信号看作流.流的管理者NSStream看作管道. 内容包含两方面: 1.流的建立:源.目的地: 2.流的管理:状态事件与数据事件. 本质上是建立联系.处理数据.处理状态.
- 两种获取connectionString的方式
两种获取connectionString的方式 1. public static string connectionString = ConfigurationManager.ConnectionSt ...
- Hibernate中两种获取Session的方式
转自:https://www.jb51.net/article/130309.htm Session:是应用程序与数据库之间的一个会话,是hibernate运作的中心,持久层操作的基础.对象的生命周期 ...
- php 两种获取分类树的方法
php 两种获取分类树的方法 1. /** * 获取分类树 * @param array $array 数据源 * @param int $pid 父级ID * @param int $level 分 ...
随机推荐
- JQ的is()
is():根据选择器.元素或jQuery对象来检测匹配元素集合, 如果这些元素中至少有一个元素匹配给定的参数,则返回true. <!DOCTYPE html> <html lang ...
- srpingboot拦截器
1.创建一个普通的web工程. 2.先创建需要的基础文件,比如一个用户类. package com.example.mode; public class User { private Integer ...
- 最新版2022年任我行管家婆工贸版ERP M7 V22.0进销存财务生产管理软件网络版——云上的集团化制造管理系统
在互联网+制造业的时代背景下,制造业在利用互联网技术进行转型升级的同时,也面临着供应链体系和生产模式的重塑,主要呈现出以下特点: 多元化发展 对外,传统企业正在通过"互联网+"逐步 ...
- socket套接字补充、操作系统发展史、进程
目录 socket套接字之UDP协议 操作系统的发展史 手工操作 批处理系统 联机批处理系统 脱机批处理系统 多道技术 进程理论 并发与并行 同步与异步 阻塞与非阻塞 同步异步与阻塞非阻塞总结 soc ...
- 深入C++02:深入学习C++还必须掌握的基础
深入学习C++还必须掌握的基础 掌握形参带默认的函数 1.给默认值方向:从右向左给默认值: 2.调用效率:如果传默认值或者立即数(不需要从容器或内存取取的数字)的话都是直接将数字直接push进栈:没有 ...
- Spring IOC源码研究笔记(2)——ApplicationContext系列
1. Spring IOC源码研究笔记(2)--ApplicationContext系列 1.1. 继承关系 非web环境下,一般来说常用的就两类ApplicationContext: 配置形式为XM ...
- iphone苹果手机拼健康码行程码教程
因为疫情原因,不管是上班,还是上学,各公司和学校都要求提供全家人的健康码和行程码,并弄成一张拼图,这样方便统计!这就苦了广大用苹果手机的朋友们了,因为苹果手机没有自带的拼图软件. 下面我就教大家一个非 ...
- LoRa无线传输技术与LoRaWAN无线模块的区别
有不少人分不清LoRaWAN无线模块与LoRa网关无线传输技术到底有什么区别,他们在物联网领域的应用到底是什么样的. LoRaWAN指的是MAC层的组网协议,而LoRa是一个物理层的协议.虽然现有的L ...
- 【生成对抗网络学习 其一】经典GAN与其存在的问题和相关改进
参考资料: 1.https://github.com/dragen1860/TensorFlow-2.x-Tutorials 2.<Generative Adversarial Net> ...
- rpc的正确打开方式|读懂Go原生net/rpc包
前言 最近在阅读字节跳动开源RPC框架Kitex的源码,分析了如何借助命令行,由一个IDL文件,生成client和server的脚手架代码,也分析了Kitex的日志组件klog.当然Kitex还有许多 ...