继续操练Stream,直接上代码:

而咱们要返回ArrayList,显示可以用构造引用来传递到里面,因为它刚好符合Supplier函数式接口的特性:不接收参数返回一个值,所以:

接下来试着将Stream转换成其它集合类型,比如:Set,如下:

接下来将集合中的字符串元素拼成一起然后再输出出来,继续可以用stream.collect()方法来实现,如下:

下面提出新的需求,对其集合中的所有字符串元素转换成大写,然后再输出出来,具体如何用stream来实现呢?

接着继续,将一个整数集合中的元素进行平方之后再打印出来,很简单,直接上代码:

对于Stream而言,除了用map可以映身之后,还有一个flatMap(),flat是平面的意思,那这个方法用在什么场合之下呢?先来看一下下面的这个Stream:

如果此时想把这些集合元素里面数据进行平方然后再输出出来,这时该怎么办呢?当然这时map()方法已经无法达到映射的目的了,这时flatMap()就派上用场了,它就是会将集合元素打平,也就是可以理解将这些不同的集合元素打散放到一个最终的集合中,所以说可以这样整:

这时元素就已经是打散了,而不是分散在不同的List中了,这时就再可以配合map来对其进行数据映射啦,如下:

进一步看出使用了Stream()之后既简便可读性又好,如果采用传统的方法来实现上面的要求那得多次循环,然后弄一些临时变化等等。

接下来再来学习一下stream的其它方法:

其中Supplier是不接收参数返回一个值,这里创建一个UUID的Stream,如下:

接着对其进行输出,这里又涉及到一个新的方法,如下:

其中看一下findFist()方法:

而对于Optional在之前也对它进行学习过,它是用来避免空指针的,而它里面的get()方法就可以拿到具体值,如下:

那思考一下为啥这个findFirst()方法返回的是一个Optional对象,而非一个具体的值呢?就是为了避免空指针嘛,因为当流里面木有元素的时候,那findFirst()肯定是不存的,另外目前使用Optional的方式不是标准的写法,之前也强调过,IDE对目前的写法也给出提示了,如下:

所以改成正确的写法:

如果咱们改成一个空的Stream,看会不会报错?

接下来再来学习一下Stream的另外一个新接口,如下:

先来看一下它的定义:

而回顾一下UnaryOperator接口的原型:

接着看一下它的Javadoc:

根据这个javadoc初步的能感觉到用这个方法可以生成一个指定规则生成的数列,所以下面来使用一下它:

但是此时生成的是一个无限流,因为我们没有对这个流做任何限制,所以这时的输出当然就是无限循环喽:

所以一般如果要用到流的这个迭待方法,一定要给它加一个限制,如何限制呢?

其中查看一下limit()方法:

java8学习之Stream实例剖析的更多相关文章

  1. java8学习之Stream陷阱剖析

    上一次[http://www.cnblogs.com/webor2006/p/8297603.html]在最后用stream.iterate()生成了6个奇数,接着基于它来实现如下需求:找出该流中大于 ...

  2. java8学习之Stream分组与分区详解

    Stream应用: 继续举例来操练Stream,对于下面这两个集合: 需求是:将这两个集合组合起来,形成对各自人员打招呼的结果,输出的结果如: "Hi zhangsan".&quo ...

  3. Java8学习(4)-Stream流

    Stream和Collection的区别是什么 流和集合的区别是什么? 粗略地说, 集合和流之间的差异就在于什么时候进行计算.集合是一个内存中的数据结构,它包含数据结构中目前所有的值--集合中的每个元 ...

  4. java8学习之Stream介绍与操作方式详解

    关于默认方法[default method]的思考: 在上一次[http://www.cnblogs.com/webor2006/p/8259057.html]中对接口的默认方法进行了学习,那在Jav ...

  5. java8学习之Predicate深入剖析与函数式编程本质

    上次[http://www.cnblogs.com/webor2006/p/8214596.html]对Predicate函数接口进行了初步的学习,其中提到了在未来要学习的Stream中得到了大量的应 ...

  6. java8学习之Stream源码分析

    上一次已经将Collectors类中的各种系统收集器的源代码进行了完整的学习,而在之前咱们已经花了大量的篇幅对其Stream进行了详细的示例学习,如: 那接下来则通过源代码的角度来对Stream的运作 ...

  7. java8学习之Stream深度解析与源码实践

    继续对流进行学习,首先先说明一下流的特点: 1.Collection提供了新的stream()方法. 2.流不存储,通过管道的方式获取值. 3.本质是函数式的,对流的操作会生成一个结果,不过并不会修改 ...

  8. java8 新特性 Stream

    1. Stream初体验 我们先来看看Java里面是怎么定义Stream的: A sequence of elements supporting sequential and parallel agg ...

  9. Java8学习笔记----Lambda表达式 (转)

    Java8学习笔记----Lambda表达式 天锦 2014-03-24 16:43:30 发表于:ATA之家       本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人 ...

随机推荐

  1. POI XSSF与HSSF区别

    java操作Excel时报如下错误: The supplied data appears to be in the Office 2007+ XML. You are calling the part ...

  2. 虚拟机安装: vmware + ubuntu16.04

    参考博客:https://blog.csdn.net/qq1326702940/article/details/82322079 这个博客讲的很详细,只要ubuntu版本相同,应该是一模一样. 注意点 ...

  3. Eclipse 4.11 Debug jar包代码时进入空心J

    代码调试时,进入jar包中的时候,会出现如下的情况超级影响代码调试 断点打在上面的地方,但是却进入到了空心J的那个地方了. 解决办法:去掉勾选即可. 我是这么解决的.

  4. 微擎-T

    微擎菜单栏对应的数据库表 ims_modules_bindings 小程序前端uniacid的配置,微擎后台进入小程序应用时鼠标移动至管理查看链接即可(不点击) ims_account_wxapp微擎 ...

  5. PJzhang:微软出口管制条例

    猫宁!!! 翻译:PJzhang 微软公司的技术,产品和服务受美国出口管理法规(EAR)的约束,由美国商务部工业与安全局(BIS)监督执行. 此外,财政部,国务院对其他与出口相关的技术和产品转让,交易 ...

  6. pubwin2009 备份文件恢复

    local_db.DBBak 恢复注意: 1.先安装好全新server -> 用SQLManager连接数据库 连接时右键编辑 SQLSERVER注册属性  默认sql连接 帐号netcafe ...

  7. 使用PowerShell 自动创建DFS命名空间服务器

    运行环境:Windows Server 2012 R2 DFS命名空间概述 DFS命名空间 PowerShell脚本命令 Writing PowerShell DFS Scripts: Managin ...

  8. c++ string详解 assign

    assign方法可以理解为先将原字符串清空,然后赋予新的值作替换. 返回类型为 string类型的引用.其常用的重载也有下列几种: a. string& assign ( const stri ...

  9. 自然语言处理工具hanlp 1.7.3版本更新内容一览

    HanLP 1.7.3 发布了.HanLP 是由一系列模型与算法组成的 Java 工具包,目标是普及自然语言处理在生产环境中的应用.HanLP 具备功能完善.性能高效.架构清晰.语料时新.可自定义的特 ...

  10. 格式化hdfs以及namnode没启动

    先stop-all.sh 删除hdfs-site.xml中的这两个目录 然后删除core-site.xml 中的这个目录 然后格式化hdfs hdfs namenode -format 即可启动成功 ...