zoukankan      html  css  js  c++  java
  • 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()方法:

  • 相关阅读:
    趁热打铁(如何改bug)
    element el-input的autofocus失效问题解决
    为什么要将图片转为base64格式
    学习jdk1.8的Lambda和Stream
    (隐式参数)java8的方法引用之重新认识java的this关键字
    记一次惊奇面试,希望能为广大求职中的javaer提供一点经验。
    单机版ZooKeeper的安装教程
    两个对象值转换的方法(BeanUtils.copyProperties与JSONObject.parseObject对比)
    SpringBoot监控管理之Admin监管使用
    安利一个十分实用的IDEA插件--RestfulToolkit
  • 原文地址:https://www.cnblogs.com/webor2006/p/8297603.html
Copyright © 2011-2022 走看看