为了更好利用java提供的各种东西,今天在这里对Stream进行探索。

在日常开发中肯定是少不了对于集合的操作,无论是创建的查所有、求和、求最值等都需要涉及到集合,这个时候我通常都是套上for循环代码比较繁琐。

这个时候java流就登场了,使用Stream让开发更高级更快捷。

Stream就是对于集合进行想要的操作,例如求和、求最值、筛选、映射、取出想要的内容等。

Stream的操作一般分为三个步骤:1、创建流;2、执行中间操作,也就是进行筛选、映射等操作;3、执行终端操作,将处理好的数据从流里面取出来,以供我们使用。

中间操作 

一个流可以后面跟随零个或者多个中间操作。其目的主要是为了打开流,做出某种程度的数据映射/过滤,然后再返回一个新的流,交给下一个流使用。这类操作都是惰性化的,仅仅调用到这类方法,并没有开始真正的流的遍历,真正的遍历要等到终端操作的时候。常见的中间操作有:filter 过滤、map 流映射等。

终端操作

        一个流有且只能有一个终端操作,当这个操作执行后,流就被关闭了,无法在进行操作。因此一个流只能被遍历一次,若要再遍历需要通过数据源再生成一次流。终端操作的执行才会真正开始流的遍历,也就是去获取我们想要的数据。如count、collect

介绍完基础概念后就让我们开始流的使用吧

filter 筛选过滤

        使用filter方法进行条件筛选,filter的方法参数为一个条件(过滤保留函数返回值为true的元素)。

代码案例:

        // 筛选过滤掉小于5的部分List<Integer> integers = Arrays.asList(1, 2, 4, 5, 6, 7, 8, 9, 10);Stream<Integer> integerStream = integers.stream().filter(i -> i >= 5);integerStream.forEach(i -> System.out.println(i));System.out.println("----------------------------------------------------------------");// 寻找名字长度大于3的部门List<String> names = Arrays.asList("alice", "bob", "jack", "rose");Stream<String> stringStream = names.stream().filter(i -> i.length() > 3);stringStream.forEach(i -> System.out.println(i));// distinct 去重,通过distinct方法快速去除重复的元素List<String> names = Arrays.asList("jack", "jack", "alice", "alice", "tom", "tom");Stream<String> nameStream = names.stream().distinct();nameStream.forEach(i -> System.out.println(i));// limit 返回指定流个数,注意 limit() 方法的参数一定要 >= 0 否则会抛出异常List<Integer> maths = Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);Stream<Integer> mathStream = maths.stream().limit(5);mathStream.forEach(i -> System.out.println(i));// skip 跳过几个元素,在一个流中跳过n个元素,且 n>=0List<Integer> maths = Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);Stream<Integer> mathStream = maths.stream();Stream<Integer> skipStream = mathStream.skip(4);skipStream.forEach(i -> System.out.println(i));// map 流映射,所谓流映射就是将接受的元素映射为另一种元素, 就像从人群中获取人的身高信息,一个人肯定不止有身高这么一种信息// 接下来演示将 String -> Integer 的过程List<String> names = Arrays.asList("alice", "bob", "jack", "rose");List<Integer> collect = names.stream().map(String::length).collect(Collectors.toList());collect.forEach(i -> System.out.println(i));// flatMap 流转换,将一个流中每个值转换为另一流// 将主角的名字们按" "分隔,使用flatMap()方法形成新的流,去除重复项获取到主角名字的单词 word,完成了 stream -> strem 的转换List<String> figures = Arrays.asList("lu ming fei", "chen mo tong", "shang shan hui li yi", "yuan zhi sheng", "yuan zhi nv");Stream<String> figureStream = figures.stream();List<String> word = figureStream.map(figure -> figure.split(" ")).flatMap(Arrays::stream).distinct().collect(Collectors.toList());word.forEach(i -> System.out.println(i));// anyMatch:是否匹配任一元素,anyMathch用于判断流中是否存在至少一个满足条件的元素,这个判断条件通过lambda表达式传递给anyMatch,执行结果为boolean类型// 我个人感觉一般用于条件判断,例如在执行更复杂的业务前进行判断,如果没有执行的比较就跳过,例如vip// 例如这个例子,夏县中学普通班立有一个同学考上二本,那么说明今年这个普通班的班主任及各科老师很负责List<Integer> results = Arrays.asList(283, 295, 387, 403,411, 299, 390);Stream<Integer> resultStrem = results.stream();if(resultStrem.anyMatch(i -> i >= 417)){System.out.println("这个夏中普通班的老师很负责!");}else{System.out.println("这个夏中普通班的学生太皮,老师太懒。");}

关于java中Steam流的探索相关推荐

  1. Java中Steam流的用法及使用备忘

    文章目录 Java中Steam流的用法及使用备忘 一. 流的常用创建方法 1-1 使用Collection下的 stream() 和 parallelStream() 方法 1-2 使用Arrays ...

  2. java中steam流的使用

    (1)数组合并 : 原始合并 定义俩个集合合并为一个集合 例子: public class 测试 {/*** 把小王合道* list中* */public static void main(Strin ...

  3. java中字符流 字节流_理解Java中字符流与字节流的区别

    1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个"流动的方向",通常可 ...

  4. Java中IO流的总结

    有关Java中IO流总结图 流分类 按方向分 输入流 输出流 按单位分 字节流 字符流 按功能分 节点流 处理流(过滤流) 其他 所有的流继承与这四类流:InputSteam.OutputStream ...

  5. java中各种流的详细使用

    http://hunulei.blogbus.com/logs/2005/07/1296309.html http://java.sun.com/docs/books/tutorial/essenti ...

  6. java 中的流_Java中的流(IO

    Java中的流(IO流. java.io包中定义了多个流类型(类或抽象类)来实现 输入 / 输出功能,可以从不同的角度对其进行分类: 按单位可分为: 字节流         (一个字节一个字节的读取) ...

  7. java中IO流详解

    不断更新中!!! 1.流的定义及分类 流是个抽象的概念,是对输入输出设备的抽象,Java程序中,对于数据的输入/输操作都是以"流"的方式进行.设备可以是文件,网络,内存等.将数据从 ...

  8. Java中IO流体系

    转载: https://mp.weixin.qq.com/s?__biz=MzA5NzgzODI5NA==&mid=2454030958&idx=1&sn=df27aadb92 ...

  9. Java中IO流的分类和BIO,NIO,AIO的区别

    到底什么是IO 我们常说的IO,指的是文件的输入和输出,但是在操作系统层面是如何定义IO的呢?到底什么样的过程可以叫做是一次IO呢? 拿一次磁盘文件读取为例,我们要读取的文件是存储在磁盘上的,我们的目 ...

最新文章

  1. 我非要捅穿这 Neutron(一)网络实现模型篇
  2. 完整计算机组成系统,计算机组成原理与完整系统结构.doc
  3. Repository模式(转载)
  4. C#中容器控件GroupBox、Panel、TabControl
  5. ADSL掉线解决方法全略
  6. 第 二 十 八 天 :LB 负 载 均 衡 搭 建 之 LVS
  7. MATLAB教程(1) MATLAB 基础知识(1)
  8. 河南农大姚文与张会勇课题组合作发表长文综述,系统总结R/Shiny在开发交互式生物学网络工具中的应用...
  9. python输出生日程序_Python中:利用七段数码管输出自己的生日及系统当前时间
  10. 前端面试题汇总(css基础篇)
  11. c oracle 存储图片,用c语言如何读取和保存jpg图片文件?
  12. 2020身高体重标准表儿童_2019年0~12岁儿童身高体重标准表出炉了,你家娃达标没...
  13. 树莓派进阶之路 (027) - 在Linux中增加swap空间
  14. 颜色模式中8位,16位,24位,32位色彩是什么意思?会有什么区别?计算机颜色格式( 8位 16位 24位 32位色)【转】...
  15. 数据库建立索引的优缺点及适合建立索引的字段
  16. laravel较优雅的分表关联查询(性能较好,SQL的数量=表的数量,涵盖了较多laravel手册推荐的方法)...
  17. cropper.js 裁剪图片并上传(文档翻译+demo)
  18. Markdown - Markdown 引用图片太大怎么办 md控制图片的大小 对齐方式
  19. 视频广告播放器(缓存、循环播放)
  20. 【论文学习】Multi-modal Knowledge Graphs for Recommender Systems

热门文章

  1. BlackShadow 黑客入侵以色列托管公司并勒索客户
  2. 微信公众号ios端,滚动条不隐藏解决办法其中之一
  3. wac361能否做路由器_WAC360/361系列无线控制器WLAN本地转发配置方法
  4. 如何解决Mac上网速度很慢的问题(多种可能分析)
  5. Mobl试用之helloword
  6. MODTRAN 辐射模拟
  7. 为什么游戏AI无法帮助AI在现实世界中发挥作用,但可以
  8. 一个加密PHP脚本的解码方法
  9. 「数据分析入门」某线下连锁水果店销售数据分析
  10. Hadoop海量级分布式存储