java 字符串掐头去尾_Java 8 Stream 简单介绍
前言
其实,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 简单介绍相关推荐
- java 字符串掐头去尾_java中常见的类
简介 类层次结构最顶层的基类,所有类都直接或间接继承自Object类,所以,所有的类都是以恶个Object(对象) 构造方法 Object: 构造一个对象,所有子类初始化时都会优先调用该方法 常用的成 ...
- java 继承 冒号_java继承(extends)简单介绍
继承相信很多人都有听说过,继承是面向对象的三个基本特征之一,下面的话就一起通过简单的文章来对java继承进行一下了解吧. 继承和现实生活中的"继承"的相似之处是保留一些父辈的特性, ...
- java标识符_Java标识符的简单介绍
各位小伙伴大家好,这次小编要介绍一下Java的标识符,那么,问题来了,什么是标识符呢?下面,小编来给大家解答吧,java标识符就是在java程序中给变量,类,方法等命名的符号.(关于类和方法一时半会说 ...
- java 随机生成英文名_java随机数Reandom(简单介绍)
简单介绍 Java中存在着两种Random函数 一.java.lang.Math.Random; 调用这个Math.Random()函数能够返回带正号的double值,该值大于等于0.0且小于1.0, ...
- java 逻辑运算符有哪些_Java逻辑运算符的简单介绍
各位小伙伴们,大家好,这次小编要介绍的java的逻辑运算符.在之前的文章中有这样的疑问,要进行多次判断应该如何实现?现在逻辑运算符可以帮助我们解决.逻辑运算符主要分为三种,与(&&), ...
- Java 的toString() 和 equals()函数简单介绍
toString() 和 equals() 都是java面试中经常问到的地方. 特别是1条经典问题: equals 和 "==" 的区别... 本文就从简单介绍下这两个objec ...
- java 字符串函数_Java字符串函数– 25+必须知道方法
java 字符串函数 Java字符串函数 (Java String Functions) Java String class has a lot of functions to manipulate ...
- Java中Synchronized的用法(简单介绍)
简单介绍 synchronized是Java中的关键字,是一种同步锁.它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调 ...
- java字符串编程_java字符串抉择
下面我们就字符串连接方面分析. 1.String 打开String的源码,如图所示 会发现存储字符串的字符数值是final常量.再看St final修饰的属性为常量(值不可改变),要么在声明的同时赋值 ...
最新文章
- Bags of Binary Words | 词袋模型解析
- 转让app后AppStore应用名称下面所有者显示问题
- 基于c语言的linux嵌入式开发入门
- python 定时任务系统_Python定时任务,实现自动化的方法
- Visual Studio 2010 单元测试之一---普通单元测试:http://blog.csdn.net/tjvictor/archive/2011/02/09/6175362.aspx...
- 在线编码工具_我希望在开始编码时就已经知道的工具
- 漫步最优化二——基本优化问题
- (22)Xilinx FPGA PCIE中断接口(学无止境)
- [swift] LeetCode 21. Merge Two Sorted Lists
- bzoj2208: [Jsoi2010]连通数
- SOAPUI使用教程-REST请求工作
- 用c语言编写车牌识别系统,这算干货吗?写点车牌识别系统方案
- 计算机音乐钢琴教程,大觉者电脑音乐教程『第十六课』——钢琴卷帘窗的使用...
- JUCE学习笔记05-音频输出基础(白噪)
- 人生顿悟之博观而约取,厚积而薄发
- 移动硬盘读取速度突然变慢?教你7个方法解决
- ffmpeg项目编译出错问题解决方案.
- python输入一个英文句子、统计单词个数_C语言编程求一个英文句子中的单词数和最长单词的位置、长度及输出这个单词。c++编程 从键盘输入一个英文...
- [洛谷]CON1466 洛谷2017春节联欢赛 Hello Dingyou题解 Bzoj4763雪辉
- 互联网的“达尔文”式猜想
热门文章
- photoshop使用笔记-制作古代印章
- AE插件:能量激光描边光效特效Saber
- 如何将pdf修改编辑
- “北大数学系扫地僧” 等十人获奖,均分1000万元,达摩院2021青橙奖出炉
- python 爬取企业注册信息_读书笔记(十)——python简单爬取企查查网企业信息,并以excel格式存储...
- App Store Review Guidelines中文版-上部
- opencv 通过标定摄像头测量物体大小_解决方案 | 如何用普通手机准确测量物体体积?...
- 壁挂炉开启采暖模式后,水泵24小时运转,安装联动线(联控线)后完美解决
- 【Kettle】如何解决Excel输出卡死或太慢
- html多重表格设置密码,日记坊-excel协同办公:一张表格设置多个不同密码,限制多区域编辑权限...