流式思想概述和两种获取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 分 ...
随机推荐
- deepin安装jdk配置环境
下载一个jdk压缩包https://download.oracle.com/java/18/latest/jdk-18_linux-x64_bin.tar.gz 这个包,不用安装,下下来,直接解压,然 ...
- Swift初探03 字符串操作
字符串操作 01 获取长度 var a = "he l lo" print(a.count) // 计算空格,输出7 02 String.Index类型 String.Index类 ...
- 渗透:zANTI
Zanti简介 Zanti是由Zimperium公司打造的Android平台下的渗透测试工具包. Zanti支持两种中间人攻击方式,分别为MIMT攻击和ARP攻击,中间人内带有多个攻击模块,例如MAC ...
- MySQL(8) - MySQL的事务机制
MySQL数据库的事务机制 1.1.事务的概念和特性 1.2.事务的隔离级别 repeatable read是mysql默认的事务隔离级别 #事务A #事务A,临时修改工资,未commit, STAR ...
- 好客租房1-React基础目标
学习目标 能够说出React是什么 掌握react的特点 掌握react的基本使用 能够使用react脚手架 学习目录 react概述 react基本使用 react脚手架
- 使用 Postman 实现 API 自动化测试
背景介绍 相信大部分开发人员和测试人员对 postman 都十分熟悉,对于开发人员和测试人员而言,使用 postman 来编写和保存测试用例会是一种比较方便和熟悉的方式.但 postman 本身是一个 ...
- 深度学习可视化工具--tensorboard的使用
tensorboard的使用 官方文档 # writer.add_scalar() # 添加标量 """ Args: tag (string): Data identif ...
- README.exe 是的,你看错是EXE
SmartIDE让你的README变成可执行文档,再也不用编写无用的文档,再也不必操心环境问题. 作为开发者,拿到一个新的代码库的时候一般都会先去看README文件,通过这个文件可以知道这套代码所 ...
- Mesokurtic,Leptokurtic, Platykurtic介绍
[原文地址1] [原文地址2] 简要介绍 这三个东西其实是把峰度(Kurtosis)分成了三种类别,峰度也就是评测一个分布的尾部与正态分布的尾部有多不同的定量测量值(如下图所示). 对于一个正态分布的 ...
- E104-BT01超低功耗蓝牙模块BLE4.0协议的片载系统解决方案
1.E104-BT01简介 E104-BT01 是亿佰特设计生产的一款小体积的蓝牙模块,贴片型(引脚间距 1.27mm),自带高性能 PCB 板载天线.支持 BluetoothV4.0 标准,简单配置 ...