• JAVA8_STREAM


    JAVA8_STREAM

    StreamJava8的一大亮点,是对容器对象功能的增强**

    流的方法

      Stream的方法分为两种,一种是中间操作,一种是终端操作;

      中间操作(Intermediate Operations):中间操作会返回一个新的流,一个流可以后面跟随零个或多个中间操作。其目的主要是打开流,做出某种程度的数据映射/过滤,然后会返回一个新的流,交给下一个操作使用。这类操作都是惰性化的(lazy),就是说,仅仅调用到这类方法,并没有真正开始流的遍历。而是在终端操作开始的时候才真正开始执行;中间操作包括

    filter():过滤
    map():映射
    flatMap():
    distinct():去重
    sorted():排序
    peek()
    limit():限制条数
    skip():跳过条数
    

      终端操作(Terminal Operations):是指返回最终的结果。一个流只能有一个terminal操作,当这个操作执行后,流就被使用了,无法再被操作。所以这必定是流的最后一个操作。Terminal操作的执行,才会真正开始流的遍历,并且会生成一个结果,或者一个 side effect;终端操作包括:

    forEach()
    forEachOrdered()
    toArray()
    reduce()
    collect()
    min()
    max()
    count()
    anyMatch()
    allMatch()
    noneMatch()
    findFirst()
    findAny()
    
    中间操作

      延迟执行是中间操作的一个重要特点,延迟执行是中间操作,延迟到遇到终端操作时,需要中间操作的结果,才会执行中间操作。 如下图,如果一个stream后面全是中间操作,那么这些中间操作是不会执行的,所以运行结果没有打印任何东西:

    当随便加上一个终端操作时,流就会遍历并执行map方法中的打印:

      流只遍历一次,是流的另一个特性。比如一个list,中间操作有filter,map,sort,流的执行并不是先变量所有的元素,经过filter操作,再遍历所有元素,进行map操作。而是一个元素生成流,经过filter操作,然后进行map操作,再进行sort操作,最后经过终端操作。如果终端操作还没有结束,再进入下一个元素的循环。

    下图就是一个例子,在map方法后面加了一个limit(1),从执行结果可以看出,是一个元素走完整个流程的,然后limit条件执行之后,不会再遍历下一个元素了:

    待补充

      
  • 相关阅读:
    Exercice_3.8
    Exercice_3.13.1_练习使用vector2
    Exercice_3.13_练习使用vetor
    Exercice_3.10_去掉string对象中的标点符号
    Exercice_3.7_判断两个字符串的大小和长度
    1-日期时间视图 2-长按事件
    View(视图)2
    View(视图)
    计算器(UI事件)给按钮添加监听器
    Activity(活动)
  • 原文地址:https://www.cnblogs.com/yanghanwen/p/14249351.html
Copyright © 2020-2023  润新知