流思想概述

注意:请暂时忘记对传统IO流的固有印象 !

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

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

这张图中展示了过滤、映射、跳过、计数等多步操作,这是一种集合元素的处理方案,而方案就是一种"函数模型”。图中的每一个方框都是一个“流”,调用指定的方法,可以从一个流模型转换为另一个流模型。而最右侧的数字3是最终结果。

这里的 filter 、map 、 skip都是在对函数模型进行操作,集合元素并没有真正被处理。只有当终结方法 count执行的时候,整个模型才会按照指定策略执行操作。而这得益于Lambda的延迟执行特性。

备注:"Stream流"其实是一个集合元素的函数模型,它并不是集合,也不是数据结构,其本身并不存储任何元素(或其地址值)。

Stream(流)是一个来自数据源的元素队列  

  元素是特定类型的对象,形成一个队列。Java中的Stream并不会存储元素,而是按需计算。

  数据源流的来源。可以是集合,数组等。

和以前的Collection操作不同,Stream操作还有两个基础的特征:

  Pipelining: 中间操作都会返回流对象本身。这样多个操作可以串联成一个管道,如同流式风格( fluentstyle )。这样做可以对操作进行优化,比如延迟执行(aziness)和短路( short-circuiting)。

  内部迭代︰以前对集合遍历都是通过lterator或者增强for的方式,显式的在集合外部进行迭代,这叫做外部迭代。Stream提供了内部迭代的方式,流可以直接调用遍历方法。

当使用一个流的时候,通常包括三个基本步骤∶获取一个数据源(source ) →数据转换→执行操作获取想要的结果,每次转换原有Stream对象不改变,返回一个新的Stream对象(可以有多次转换),这就允许对其操作可以像链条一样排列,变成一个管道。

两种获取Stream流的方式

java.util.stream.stream<T>是Java 8新加入的最常用的流接口。(这并不是一个函数式接口。)

获取一个流非常简单,有以下几种常用的方式:
  -所有的collection集合都可以通过stream黑X认方法获取流;
  default stream<E> stream ()
  - Stream接口的静态方法of可以获取数组对应的流。
  static <T> Stream<T> of (T.. . values)参数是一个可变参数,那么我们就可以传递一个数组

package A_Lian_two.D04;

import java.util.*;
import java.util.stream.Stream;

public class Demo02GetStream {
public static void main(String[] args) {
//把集合转换为Stream流
ArrayList<String> list = new ArrayList<>();
Stream<String> stream1 = list.stream();

HashSet<String> set = new HashSet<>();
Stream<String> stream2 = set.stream();

HashMap<String, String> map = new HashMap<>();
//获取键,存储到一个set集合中
Set<String> keySet = map.keySet();
Stream<String> stream3 = keySet.stream();

//获取值,存储一个Collection集合中
Collection<String> values = map.values();
Stream<String> stream4 = values.stream();

//获取键值对(键与值的映射关系,entrySet)
Set<Map.Entry<String, String>> entries = map.entrySet();
Stream<Map.Entry<String, String>> stream5 = entries.stream();

//把数组转换为Stream流
Stream<Integer> stream6 = Stream.of(1, 2, 3, 4, 5);
//可变参数可以传递数组
Integer[] arr={1,2,3,4,5};
Stream<Integer> stream7 = Stream.of(arr);
String[] arr2={"a","bb","ccc"};
Stream<String> stream8 = Stream.of(arr2);

}
}

流思想概述-两种获取Stream流的方式的更多相关文章

  1. 流式思想概述和两种获取Stream流的方式

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

  2. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第3节 两种获取Stream流的方式_11_练习:集合元素处理(Stream方式)

  3. Core 导出(流和URL两种)

    1.流 2.URL 两种都是使用Epplus 1. EPPlus的基本介绍 EPPlus是一个使用Open Office XML(xlsx)文件格式,能读写Excel 2007/2010 文件的开源组 ...

  4. 两种获取connectionString的方式

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

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

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

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

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

  7. KbmMW两种查询结果集通讯方式

    KbmMW本身可以用QueryService的方式进行远程数据查询,但是SmpileService同样具有很强的扩展性可以实现数据查询,下面展示两种基于SmpileService的远程数据查询方法,其 ...

  8. Js之Dom学习-三种获取页面元素的方式、事件、innerText和innerHTML的异同

    一.三种获取页面元素的方式: getElementById:通过id来获取 <body> <input type="text" value="请输入一个 ...

  9. SpringMVC 02: SpringMVC响应get和post请求 + 5种获取前端数据的方式

    响应get和post请求 SpringMVC中使用@RequestMapping注解完成对get请求和post请求的响应 项目结构和配置文件与SpringMVC博客集中的"SpringMVC ...

随机推荐

  1. 题解 SP10500 HAYBALE - Haybale stacking

    前言 想了好久树状数组啥的,后来想想写打个差分再说,结果写完一遍AC了-- 强烈安利 题意 一个由 \(n\) 个元素组成的序列,给出 \(k\) 个操作,每次将 \(a\sim b\) 加上 \(1 ...

  2. C/C++ 知海拾遗

    C语言知识拾遗 2022/11/11 memset()函数用法 包含头文件:<string.h> 作用:给任意类型变量数组初始化,即万能初始化函数. 使用形式:memset( void* ...

  3. 深度学习之Tensorflow入门

    声明 本文参考[中文][吴恩达课后编程作业]Course 2 - 改善深层神经网络 - 第三周作业_何宽的博客-CSDN博客我对这篇博客加上自己的理解,力求看懂 本文所使用的资料已上传到百度网盘[点击 ...

  4. C++两种方法改变输出颜色

    方法一: 使用 SetConsoleTextAttribute    需要引入 #include "windows.h"    SetConsoleTextAttribute(Ge ...

  5. 北极星Polaris+Gateway动态网关配置!

    springcloudtencetn 父工程: pom <?xml version="1.0" encoding="UTF-8"?> <pro ...

  6. table 动态隐藏tr行

    table: <table style="width:100%" class="table01" cellspacing="1" ce ...

  7. java面试题-常用框架

    Spring Spring 是什么 一个开发框架,一个容器,主要由面向切面AOP 和依赖注入DI两个方面,外加一些工具 AOP和IOC AOP 面向切面 AOP是一种编程思想,主要是逻辑分离, 使业务 ...

  8. JavaEE Day05 JDBC(用Java语言操作数据库)

    今日内容 基本概念 快速入门 对JDBC中各个接口和类的详解 一.基本概念 1.概念:Java Database Connectivity:Java数据库连接,Java语言操作数据库 2.本质:官方( ...

  9. 【每日一题】【排序】2021年11月13日-215. 数组中的第K个最大元素※

    给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素. 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 方法1:调库 class Solution ...

  10. python之xlsx合并单元格

    需求背景: 工作中将数据保存xlsx文件之后,里面每一列中有很多重复的看着很不美观,需要将每一列中的相同值合并起来,是表格看起来美观简洁 处理前 处理后 直接上代码(内涵注释讲解) "&qu ...