前言

其实,Stream很简单,如果你感到困难的话,不妨换个角度去理解它。任何新东西都不是凭空产生的,而是缘于某种旧东西的升华和改造,不妨把Stream当做高级版的 Iterator,那么将大幅拉近Stream与你的感情距离。

1、Stream入门简介

Java 8 添加了一个新的功能称为Stream,中文译为“流”,它将要处理的元素(对象)集合看作一种流。

Stream流表示元素(对象)集合的流动序列,是Java对象的流动,不同于Java I/O中的数据流。我们知道,Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。

2、Stream流与Iterator迭代器的区别和联系

Stream 不是集合元素,更不是数据结构也不保存数据,它是有关算法和计算的,是一种思维模式和处事格局,它更像一个高级版本的 Iterator。

原始版本的 Iterator,用户只能显式地一个一个遍历元素并对其执行某些操作;而高级版本的 Stream,用户只要给出需要对其包含的元素执行什么操作,Stream 会隐式地在内部进行遍历,做出相应的数据转换。如下所示:Stream stream = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10,10);

Stream newStream = stream.filter(s -> s > 5) //6 7 8 9 10 10

.distinct() //6 7 8 9 10

.skip(2) //8 9 10

.limit(2); //8 9

newStream.forEach(System.out::println);

上述代码很简单,首先过滤小于5的数字,然后去重,最后“掐头去尾”。

通过上面的例子,大家可以看到,Stream 就如同一个迭代器(Iterator),单向,不可往复,数据只能遍历一次,遍历过一次后即用尽了,就好比流水从面前流过,一去不复返。

3、Stream流的思想追溯

任何东西都不会凭空产生的,那么Stream流的起源是什么呢?我个人猜测是这样的:

(1)Iterator思想的升华而来。

(2)SQL思想的升华而来。Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。

4、Stream的操作步骤

Stream有如下三个操作步骤:

第一步:创建Stream。

从一个数据源(如集合、数组)中获取流。例如:

(1)使用Collection下的 stream() 方法List list = newArrayList<>();

Stream stream = list.stream(); //获取一个顺序流

(2)使用Arrays中的stream()方法,将数组转成流:Integer[] nums = new Integer[10];

Stream stream =Arrays.stream(nums);

(3)使用Stream中的静态方法of()等:Stream stream =Stream.of(1,2,3,4,5,6);

流的创建方式有很多,大家根据自己的情况选择学习一下就行了。以我为例,我对数组比较有兴趣,所以我会记住Arrays.stream(nums),Stream.of(1,2,3,4,5,6),list.stream()这些,大家可以根据自己的情况选择感兴趣的记在心里就可以了。反正,肯定要在心里记住点什么。

第二步:中间操作。

一个操作的中间链,对数据源的数据进行操作。常见的操作有:

(1)filter:过滤流中的某些元素

(2)limit(n):获取n个元素

(3)skip(n):跳过n元素,配合limit(n)可实现分页

(4)distinct:通过流中元素的 hashCode() 和 equals() 去除重复元素

第三步:终止操作。

天下没有不散的宴席,数据经过中间加工操作,就轮到终止操作符上场了;终止操作符就是用来对数据进行收集或者消费的,数据到了终止操作这里就不会向下流动了,终止操作符只能使用一次。常见的终止操作有:

(1)count:统计操作,统计最终的数据个数。

(2)findFirst、findAny:查找操作,查找第一个、查找任何一个 返回的类型为Optional。

(3)min、max:最值操作,需要自定义比较器,返回数据流中最大最小的值。

5、后记

Stream的内容并不是很多,能掌握文中介绍就足以。如果在工作中碰到其他的场景而无从下手,剩下事情就交给“度娘”吧。

本文的主题是“简单介绍”,简单但是不肤浅。如果你仅仅记住Stream的使用规范,这并不是一个高效的学习方式,应该归入自己的知识体系,挂靠在某个节点之下,这样才能体会到文字背后的内涵。

java 字符串掐头去尾_Java 8 Stream 简单介绍相关推荐

  1. java 字符串掐头去尾_java中常见的类

    简介 类层次结构最顶层的基类,所有类都直接或间接继承自Object类,所以,所有的类都是以恶个Object(对象) 构造方法 Object: 构造一个对象,所有子类初始化时都会优先调用该方法 常用的成 ...

  2. java 继承 冒号_java继承(extends)简单介绍

    继承相信很多人都有听说过,继承是面向对象的三个基本特征之一,下面的话就一起通过简单的文章来对java继承进行一下了解吧. 继承和现实生活中的"继承"的相似之处是保留一些父辈的特性, ...

  3. java标识符_Java标识符的简单介绍

    各位小伙伴大家好,这次小编要介绍一下Java的标识符,那么,问题来了,什么是标识符呢?下面,小编来给大家解答吧,java标识符就是在java程序中给变量,类,方法等命名的符号.(关于类和方法一时半会说 ...

  4. java 随机生成英文名_java随机数Reandom(简单介绍)

    简单介绍 Java中存在着两种Random函数 一.java.lang.Math.Random; 调用这个Math.Random()函数能够返回带正号的double值,该值大于等于0.0且小于1.0, ...

  5. java 逻辑运算符有哪些_Java逻辑运算符的简单介绍

    各位小伙伴们,大家好,这次小编要介绍的java的逻辑运算符.在之前的文章中有这样的疑问,要进行多次判断应该如何实现?现在逻辑运算符可以帮助我们解决.逻辑运算符主要分为三种,与(&&), ...

  6. Java 的toString() 和 equals()函数简单介绍

    toString() 和 equals() 都是java面试中经常问到的地方. 特别是1条经典问题:  equals 和 "==" 的区别... 本文就从简单介绍下这两个objec ...

  7. java 字符串函数_Java字符串函数– 25+必须知道方法

    java 字符串函数 Java字符串函数 (Java String Functions) Java String class has a lot of functions to manipulate ...

  8. Java中Synchronized的用法(简单介绍)

    简单介绍 synchronized是Java中的关键字,是一种同步锁.它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调 ...

  9. java字符串编程_java字符串抉择

    下面我们就字符串连接方面分析. 1.String 打开String的源码,如图所示 会发现存储字符串的字符数值是final常量.再看St final修饰的属性为常量(值不可改变),要么在声明的同时赋值 ...

最新文章

  1. Bags of Binary Words | 词袋模型解析
  2. 转让app后AppStore应用名称下面所有者显示问题
  3. 基于c语言的linux嵌入式开发入门
  4. python 定时任务系统_Python定时任务,实现自动化的方法
  5. Visual Studio 2010 单元测试之一---普通单元测试:http://blog.csdn.net/tjvictor/archive/2011/02/09/6175362.aspx...
  6. 在线编码工具_我希望在开始编码时就已经知道的工具
  7. 漫步最优化二——基本优化问题
  8. (22)Xilinx FPGA PCIE中断接口(学无止境)
  9. [swift] LeetCode 21. Merge Two Sorted Lists
  10. bzoj2208: [Jsoi2010]连通数
  11. SOAPUI使用教程-REST请求工作
  12. 用c语言编写车牌识别系统,这算干货吗?写点车牌识别系统方案
  13. 计算机音乐钢琴教程,大觉者电脑音乐教程『第十六课』——钢琴卷帘窗的使用...
  14. JUCE学习笔记05-音频输出基础(白噪)
  15. 人生顿悟之博观而约取,厚积而薄发
  16. 移动硬盘读取速度突然变慢?教你7个方法解决
  17. ffmpeg项目编译出错问题解决方案.
  18. python输入一个英文句子、统计单词个数_C语言编程求一个英文句子中的单词数和最长单词的位置、长度及输出这个单词。c++编程 从键盘输入一个英文...
  19. [洛谷]CON1466 洛谷2017春节联欢赛 Hello Dingyou题解 Bzoj4763雪辉
  20. 互联网的“达尔文”式猜想

热门文章

  1. photoshop使用笔记-制作古代印章
  2. AE插件:能量激光描边光效特效Saber
  3. 如何将pdf修改编辑
  4. “北大数学系扫地僧” 等十人获奖,均分1000万元,达摩院2021青橙奖出炉
  5. python 爬取企业注册信息_读书笔记(十)——python简单爬取企查查网企业信息,并以excel格式存储...
  6. App Store Review Guidelines中文版-上部
  7. opencv 通过标定摄像头测量物体大小_解决方案 | 如何用普通手机准确测量物体体积?...
  8. 壁挂炉开启采暖模式后,水泵24小时运转,安装联动线(联控线)后完美解决
  9. 【Kettle】如何解决Excel输出卡死或太慢
  10. html多重表格设置密码,日记坊-excel协同办公:一张表格设置多个不同密码,限制多区域编辑权限...