zoukankan      html  css  js  c++  java
  • 无情的Java 8 之 Stream和lambda表达式篇


    不好意思,最近刷小视频刷的有点上头

    看到这图就不自觉的要来一句:"卧槽,无情"

    好了,我要开始正经了

    JAVA 8 已经推出有一段时间了, 相比之前, 我们操作集合的方式应该是这样?

    这样?

    或者是这样?

            OK, 现在相信你看到这样的遍历方式可能也会吐槽一番


    Stream 是用函数式编程方式在集合类上进行复杂操作的工具,其集成了Java 8中的众多新特性之一的聚合操作,开发者可以更容易地使用Lambda表达式,并且更方便地实现对集合的查找、遍历、过滤以及常见计算等本篇只举例list和map, 为了便于理解, 我们先创建一个数据类
    PS:为了解决屏幕空间, 注释不标准, 请忽略

    首先我们先操作List

    1. 遍历所有人员的名字

        2.过滤年龄大于12的

        3.过滤年龄大于12的总人数

        4.根据年龄排序

         5.获得年龄最小的

         6.年龄最大的

          7.将所有的名字打印出来并用逗号隔开

          8.所有人年龄的总和

          9.关于统计类 IntSummaryStatistics

    -------------我是一条红色的分界线-----------

            关于Map中Stram的操作

            1.list转map

            2.在转换过程中, key重复的情况的处理方式

    (key1,key2) -> key2是一种表达式, 表示转换map时,如果有两个相同的key,

    则取后面的key2替换前面的key1,key1,key2两个关键字可以随意修改.

            3.key重复时,将前面的value和后面的value相加

     小结: 

            先说下Stream的优势:它是java对集合操作的优化,相较于迭代器,使用Stream的速度非常快,并且它支持并行方式处理集合中的数据,默认情况能充分利用cpu的资源。同时支持函数式编程,代码非常简洁。

      Stream是一种用来计算数据的流,它本身并没有存储数据。你可以认为它是对数据源的一个映射或者视图。

      它的工作流程是:获取数据源->进行一次或多次逻辑转换操作->进行归约操作形成新的流(最后可以将流转换成集合)。

            

    Stream的特性

            1.中间操作惰性执行:一个流后面可以跟随0到多个中间操作,主要目的是打开流,并没有真正的去计算,而是做出某种程度的数据映射/过滤,然后返回一个新的流,交给下一个操作使用。这类操作都是惰性化的(lazy),就是说,仅仅调用到这类方法,并没有真正开始流的遍历,并没有消耗资源。

    还有多个中间操作的话,这里的时间复杂度并不是n个for循环,转换操作都是 lazy 的,多个转换操作只会在 Terminal 操作的时候融合起来,一次循环完成。可以这样简单的理解,Stream 里有个操作函数的集合,每次转换操作就是把转换函数放入这个集合中,在Terminal操作的时候循环 Stream 对应的集合,然后对每个元素执行所有的函数。

          2.流的末端操作只能有一次:当这个操作执行后,流就被使用“光”了,无法再被操作。所以这必定是流的最后一个操作。之后如果想要操作就必须新打开流。

    关于流被关闭不能再操作的异常:

    这里曾经遇到过一个错误:stream has already been operated upon or closed

    意思是流已经被关闭了,这是因为当我们使用末端操作之后,流就被关闭了,无法再次被调用,如果我们想重复调用,只能重新打开一个新的流.



    OK, 到此, 本文暂时告一段落, 之后的代码中会大量体现stream和lambda表达式的代码, 希望大家持续关注
    下一篇, 将给大家带来一个福利插件, 希望关注

    原创:微微蓝



    想要提升自己,工作中遇到的问题,更多JAVA技术相关文章,微信扫一扫关注作者公众号

  • 相关阅读:
    ubuntu apt 主要命令及参数
    加速度计
    window下Opengl与vs2012环境配置
    java文本输入输出小结
    markdown + 七牛云,让写文更容易
    SpringBoot系列:Spring Boot使用模板引擎Thymeleaf
    SpringBoot系列:Spring Boot集成Spring Cache,使用EhCache
    SpringBoot系列:Spring Boot集成Spring Cache
    SpringBoot系列:Spring Boot集成Spring Cache,使用RedisCache
    SpringBoot系列:Spring Boot使用模板引擎JSP
  • 原文地址:https://www.cnblogs.com/onlys/p/11753676.html
Copyright © 2011-2022 走看看