zoukankan      html  css  js  c++  java
  • 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条件执行之后,不会再遍历下一个元素了:

    待补充

      
  • 相关阅读:
    C语言-if语句
    C语言-表达式
    C语言-基础
    Java for LeetCode 187 Repeated DNA Sequences
    Java for LeetCode 179 Largest Number
    Java for LeetCode 174 Dungeon Game
    Java for LeetCode 173 Binary Search Tree Iterator
    Java for LeetCode 172 Factorial Trailing Zeroes
    Java for LeetCode 171 Excel Sheet Column Number
    Java for LeetCode 169 Majority Element
  • 原文地址:https://www.cnblogs.com/yanghanwen/p/14249351.html
Copyright © 2011-2022 走看看