继续操练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. 14 count(*)

    14 count(*) count(*)实现方式 首先要声明,在不同的mysql引擎中,count(*)有不同的实现方式. --myisam引擎把一个表的总行数存在了磁盘,因此执行count(*)的时 ...

  2. JavaScript面向对象当中的几个概念

    JS面向对象过程中的几个概念 前言 面向对象描述的是一种代码组织解构的形式,一种在软件中对真实世界中问题领域的建模方法. 下面将从理论层面来介绍下面向对象编程中一些常见的概念. 对象 所谓对象,本质上 ...

  3. react-redux provider组件

    provider组件概念图   react-redux provider组件概念图 provider组件的作用 provider包裹在根组件外层,使所有的子组件都可以拿到state.示例: impor ...

  4. UOJ#494K点最短路

    #include <cstdio> #include <iostream> #include <cstring> #include <queue> #d ...

  5. webdriervAPI(窗口截图)

    from  selenium  import  webdriver driver  =  webdriver.Chorme() driver.get("http://www.baidu.co ...

  6. 【VS开发】CTime和CTimeSpan使用

    此文就用一个程序表示,相信只要是学过C语言的都能看得懂的. [html] view plain copy print? // CTimeTest.cpp : Defines the entry poi ...

  7. SSH框架aop的切面表达式

    一:概述 众所周知,Spring是一个轻量级的.非侵入式的.独立于各种应用服务器的开源框架.它的两大方面被人们所熟知,也应用很广.那就是IOC(控制反转)和AOP(面向方面编程). IOC是开发者不创 ...

  8. shell提升篇

    6. 条件判断 1.基本语法 [ condition ](注意condition前后要有空格) 注意:条件非空即为true,[ fsdm ]返回true,[] 返回false. 2. 常用判断条件 ( ...

  9. robot-framework 利用evaluate关键字生成随机数

    robot-framework 利用evaluate关键字生成随机数 最近用RF(robot-framework简称)操作MangoDB,需要直接将数据写到数据库里,又不想每次写的数据完全相同,就想到 ...

  10. Sql Server 常见的几种分页方式

    ⒈offset fetch next方式[SqlServer2012及以上版本支持][推荐] select * from T_User order by id offset rows /*(页数-1) ...