流式思想概述

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

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



这张图中展示了过滤、映射、跳过、计数等多步操作,这是一种集合元素的处理方案,而方案就是一种函数模型。途中每一个方框都是一个流,调用指定的方法,可以从一个流模型转换为另外一个流模型。而最右侧的数字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 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第3节 两种获取Stream流的方式_11_练习:集合元素处理(Stream方式)

  2. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第2节 Stream流式思想概述_3_流式思想概述

  3. Java流式思想和方法引用

    目录 Java流式思想和方法引用 1. Stream流 1.1 概述 传统集合的多步遍历代码 Stream的更优写法 1.2 流式思想的概述 1.3 获取流 1.4 常用方法 ①逐一处理:forEac ...

  4. Java8新特性 Stream流式思想(二)

    如何获取Stream流刚开始写博客,有一些不到位的地方,还请各位论坛大佬见谅,谢谢! package cn.com.zq.demo01.Stream.test01.Stream; import org ...

  5. Java学习:Stream流式思想

    Stream流 Java 8 API添加了一种新的机制——Stream(流).Stream和IO流不是一回事. 流式思想:像生产流水线一样,一个操作接一个操作. 使用Stream流的步骤:数据源→转换 ...

  6. NSStream 流式思想

    流式思想的本质是将数据或信号看作流.流的管理者NSStream看作管道. 内容包含两方面: 1.流的建立:源.目的地: 2.流的管理:状态事件与数据事件. 本质上是建立联系.处理数据.处理状态.

  7. 两种获取connectionString的方式

    两种获取connectionString的方式 1. public static string connectionString = ConfigurationManager.ConnectionSt ...

  8. Hibernate中两种获取Session的方式

    转自:https://www.jb51.net/article/130309.htm Session:是应用程序与数据库之间的一个会话,是hibernate运作的中心,持久层操作的基础.对象的生命周期 ...

  9. php 两种获取分类树的方法

    php 两种获取分类树的方法 1. /** * 获取分类树 * @param array $array 数据源 * @param int $pid 父级ID * @param int $level 分 ...

随机推荐

  1. deepin安装jdk配置环境

    下载一个jdk压缩包https://download.oracle.com/java/18/latest/jdk-18_linux-x64_bin.tar.gz 这个包,不用安装,下下来,直接解压,然 ...

  2. 初始C语言作业一

    1.下面哪个不是C语言内置的数据类型:( ) A.char B.double C.struct Stu D.short 解析: C语言中内置类型包括 char //字符数据类型 short //短整型 ...

  3. 1903021121-刘明伟 实验一 19信计JAVA—Markdown排版学习

    项目 内容 班级博客链接 19信计班(本) 作业要求链接 实验一 课程学习目标 学习使用Markdown排版 这个作业帮助我们实现了什么学习目标 学会使用Markdown排版 任务一:在博客园平台注册 ...

  4. MPLS L3 跨域 optionB 配置

    mpls跨域optionB optionB的核心思想是私网路由传递过程是 PE-ASBR1-ASBR2-PE2 在传递过程中私网标签发生了变化(由ASBR重新分配了私网标签),而在数据平面(不考虑PH ...

  5. CIAGAN: Conditional Identity Anonymization Generative Adversarial Networks阅读笔记

    CIAGAN: Conditional Identity Anonymization Generative Adversarial Networks 2020 CVPR 2005.09544.pdf ...

  6. 关于c#多线程中的几个信号量

    信号量在c#多线程通信中主要用来向阻塞的线程传达信号从而使得阻塞线程继续执行 多线程信号(线程交互):通常是指线程必须等待一个线程或者多个线程通知交互(释放信号)才可以继续执行 在c#中信号量主要有这 ...

  7. java中关于while(true)的理解

    java中while(true)的理解: while(true)作为无限循环,经常在不知道循环次数的时候使用,并且需要在循环内使用break才会停止,且在run()方法中基本都会写while(true ...

  8. ubuntu使用postfix和AWS-SES发送邮件

    在日常开发中,邮件发送是个比较常见的场景.因此出现了很多相关的软件和服务,各大云厂商也推出自己的邮件服务.今天笔者就像大家介绍一种常见的组合,AWS的邮件服务 SES 与邮件服务器 postfix 的 ...

  9. 入坑KeePass(一)安全桌面输入管理密钥后,不能输入中文

    坑一:设置了在安全桌面输入管理密钥后,重启电脑后今日keepass软件中不能输入中文: 解决方式:进入keepass软件中取消勾选,在重启软件就可以输入中文了.

  10. 开发工具-SSMS官方下载地址

    更新记录 2022年6月10日 完善标题. SQL Server Management Studio官方下载地址 https://docs.microsoft.com/en-us/sql/ssms/d ...