流式思想概述和两种获取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 分 ...
随机推荐
- Map传参优雅检验,试试json schema validator
背景 笔者目前所在团队的代码年代已久,早年规范缺失导致现在维护成本激增,举一个深恶痛疾的例子就是方法参数使用Map"一撸到底",说多了都是泪,我常常在团队内自嘲"咱硬是把 ...
- UNIAPP实现PDA扫码
目前我接触到了两种方法,以扫码pda安卓采集器(可以直接理解为手机上有个激光扫码)的设置划分. 1.扫描设置 --> 键盘方式输出(键盘类型:物理键盘),注意设置要看具体的型号: 2.扫码设置 ...
- ifconfig出现bash: ifconfig:command not found解决办法之解决连环问题
Centos7中没有安装ifconfig命令的解决方法 在这之前,centos7最小化安装默认是不能联网的,首先必须切换到root用户,再解决网络问题 一. 切换到root用户 二. ...
- 103_Power Pivot 透视表中空白标签处理及百分比
焦棚子的文章目录 请点击下载附件 1.案例来源于不断变化的需求 事实表:销售表 维度表:城市表 销售表和城市建立多对一的关系 如图1: 图1 2.插入透视表 如图2: 图2 3.问题 1.销售表中,城 ...
- 2020级cpp机考模拟题A卷-#题解2
这部分的题目都有一定难度,有兴趣的同学可以钻研一下. 特此感谢来自BDT20030 tql的支持. 2:素数的和-2 题意: 计算不大于m的素数之和.(多么容易理解的题目啊,对吧) 题解(有点复杂的 ...
- Spring Authorization Server(AS)从 Mysql 中读取客户端、用户
Spring AS 持久化 jdk version: 17 spring boot version: 2.7.0 spring authorization server:0.3.0 mysql ver ...
- Eoapi — 一个可拓展的开源 API 工具
在社区中时常会出现"抱怨某商业产品越来越臃肿"的声音,API 工具也是如此.从最早期只做 API 调试的工具,到经过多年的演进后集成全面功能的"庞然大物", ...
- 可变参数——JavaSE基础
可变参数 方法声明中,在指定参数类型后加一个省略号...即可声明可变参数 可变参数必须是参数列表的最后一个参数 声明 public void test(int... i){ System.out.pr ...
- 2020.09.12【NOIP提高组&普及组】模拟赛C组 总结
总结:这次比赛成绩并不理想,虽然策略得当 \(P.S.\):太多题有多组数据,但是样例只有一个数据 各题题解和改题情况 T1 匹配 题面 描述 给你一个由{a,b-z,A,B-.Z}组成的字符串,我们 ...
- VMware Workstation 虚拟机安装教程
一.介绍篇 VMware Workstation 16 Pro是VMware(威睿公司)于2021年最新发布的一代虚拟机软件,软件的中文名是"VMware 工作站 16 专业版". ...