流式思想概述和两种获取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 分 ...
随机推荐
- web安全之自己写一个扫描器
web安全之自己写一个扫描器 自己来写一个简单的目录扫描器,了解扫描器的运转机制和原理,因为python写脚本比较容易所以用python写一个网站目录扫描器. 第一步:我们需要导入所需要的库 1 im ...
- 【FineBI】FineBI连接阿里云mysql教程
因为某些原因需要查看数据信息,之前连接成功一次,今天软件更新了以后发现连接信息丢. 又重新折腾了一下. 主要有2个地方: 1.查看阿里云数据库外网连接地址:打开云数据库RDS-实例列表-管理-数据库连 ...
- babel使用
Babel转码器 Babel定义 Babel 是一个广泛使用的 ES6 转码器,可以将 ES6 代码转为 ES5 代码,从而在老版本的浏览器执行 Babel安装 仅需要在项目文件下安装 npm ins ...
- application.properties文件中暗藏玄机
上次分享了如何一步一步搭建一个springboot的项目,详细参见<5分钟快速搭建一个springboot的项目>,最终的结果是在"8080"端口搭建起了服务,并成功访 ...
- DOM树
一.DOM树一共有12种节点类型,常用的有4种: 1.Document类型(document节点)--DOM的"入口点" 2.Element节点(元素节点)--HTML标签,树构建 ...
- 图文详解MapReduce工作机制
job提交阶段 1.准备好待处理文本. 2.客户端submit()前,获取待处理数据的信息,然后根据参数配置,形成一个任务分配的规划. 3.客户端向Yarn请求创建MrAppMaster并提交切片等相 ...
- 在 GitHub 上玩转开源项目的 Code Review
一.幕后故事 时光荏苒,岁月如梭-- (太文绉绉了,这不是我的风格) 今天我准备聊聊在 GitHub 上如何玩 Code Review. 突发奇想?心血来潮?不是. 咋回事呢?(对八卦不感兴趣的可以直 ...
- Groovy基础语法
Groovy 基础语法 变量定义 1.支持动态类型,使用def关键字定义变量 // Java中定义变量的方式 int age = 18; String name = "张三"; / ...
- 5. Docker compose
把上图添加路径后,改成下图: 上图之后需要source /etc/profile #此命令重新加载环境变量文件. 在任意目录下输入docker-compose测试下,docker-compose是否安 ...
- 记录bug的贴子
这个贴子用来记录一些,平时关注新闻,暴露出来的bug,引以为戒. 2019/01/21 - 拼多多出现大量100元无门槛券 关键词: 风险控制:羊毛党: https://www.zhihu.com/q ...