java8学习之Stream实例剖析
继续操练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实例剖析的更多相关文章
- java8学习之Stream陷阱剖析
上一次[http://www.cnblogs.com/webor2006/p/8297603.html]在最后用stream.iterate()生成了6个奇数,接着基于它来实现如下需求:找出该流中大于 ...
- java8学习之Stream分组与分区详解
Stream应用: 继续举例来操练Stream,对于下面这两个集合: 需求是:将这两个集合组合起来,形成对各自人员打招呼的结果,输出的结果如: "Hi zhangsan".&quo ...
- Java8学习(4)-Stream流
Stream和Collection的区别是什么 流和集合的区别是什么? 粗略地说, 集合和流之间的差异就在于什么时候进行计算.集合是一个内存中的数据结构,它包含数据结构中目前所有的值--集合中的每个元 ...
- java8学习之Stream介绍与操作方式详解
关于默认方法[default method]的思考: 在上一次[http://www.cnblogs.com/webor2006/p/8259057.html]中对接口的默认方法进行了学习,那在Jav ...
- java8学习之Predicate深入剖析与函数式编程本质
上次[http://www.cnblogs.com/webor2006/p/8214596.html]对Predicate函数接口进行了初步的学习,其中提到了在未来要学习的Stream中得到了大量的应 ...
- java8学习之Stream源码分析
上一次已经将Collectors类中的各种系统收集器的源代码进行了完整的学习,而在之前咱们已经花了大量的篇幅对其Stream进行了详细的示例学习,如: 那接下来则通过源代码的角度来对Stream的运作 ...
- java8学习之Stream深度解析与源码实践
继续对流进行学习,首先先说明一下流的特点: 1.Collection提供了新的stream()方法. 2.流不存储,通过管道的方式获取值. 3.本质是函数式的,对流的操作会生成一个结果,不过并不会修改 ...
- java8 新特性 Stream
1. Stream初体验 我们先来看看Java里面是怎么定义Stream的: A sequence of elements supporting sequential and parallel agg ...
- Java8学习笔记----Lambda表达式 (转)
Java8学习笔记----Lambda表达式 天锦 2014-03-24 16:43:30 发表于:ATA之家 本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人 ...
随机推荐
- OpenID简介
OpenID 是一个以用户为中心的数字身份识别框架,它具有开放.分散性.OpenID 的创建基于这样一个概念:我们可以通过 URI (又叫 URL 或网站地址)来认证一个网站的唯一身份,同理,我们也可 ...
- golang(06)函数介绍
原文链接 http://www.limerence2017.com/2019/09/11/golang11/#more 函数简介 函数是编程语言中不可缺少的部分,在golang这门语言中函数是一等公民 ...
- JavaScript(2):函数
<!DOCTYPE html> <html> <body> <p>JavaScript 函数</p> <script> // 函 ...
- 基于OpenCV的三维数据点的曲面重构_MySurefaceReconstruction
在Opencv中有个Viz模块,可以显示三维物体,还可以实现三维动画,本来是很好的东东,但是里面的函数.类的说明太过简单,始终不得要领.不过其中一个扩展功能非常好,就是你可以在vtk中设计自己的模型类 ...
- 微信小程序页面左右滑动事件
微信小程序提供了页面的上下滚动的事件,在页面的js文件中, page({ onPageScroll(e) { console.log(e.scrollTop) } }) 但是不是滑动事件,滑动事件需要 ...
- bert系列一:《Attention is all you need》论文解读
论文创新点: 多头注意力 transformer模型 Transformer模型 上图为模型结构,左边为encoder,右边为decoder,各有N=6个相同的堆叠. encoder 先对inputs ...
- TensorFlow实战第三课(可视化、加速神经网络训练)
matplotlib可视化 构件图形 用散点图描述真实数据之间的关系(plt.ion()用于连续显示) # plot the real data fig = plt.figure() ax = fig ...
- ssh远程连接的故障排查详解
排查故障: 1.两个机器之间是否通畅,看物理网络(网线网卡,IP是不是正确) ping ip -t 来检测物理网络是否通畅 通 不通 不通: 1.客户端到服务器端物理链路有问题 网卡 ,IP , 网 ...
- [Python3] 036 函数式编程 返回函数
目录 函数式编程 之 返回函数 1. 引子 2. 闭包 closure 函数式编程 之 返回函数 函数可以返回具体的值 也可以返回一个函数作为结果 1. 引子 1.1 定义一个普通函数 >> ...
- pyhton sort()无返回值
li3=['] li4=li3.sort()#sort是没有返回值得,打印的是none,对列表进行升序排列 print(li4) print(li3) 输出结果是None['123', '123', ...