美文网首页
JAVA笔记#02 stream处理

JAVA笔记#02 stream处理

作者: areece | 来源:发表于2020-03-19 08:47 被阅读0次

    前言

    老子以前还以为stream就是说的inputStream, outputStream之类的东西呢,后来才知道是要进行流是计算。

    处理框架

    对于stream的操作,框架是比较简单的,就是建立流,处理流,获取结果。这话听起来和打开冰箱,把大象塞进去,关上冰箱门这么简单一样。

    建立流

    为了能够进行流处理,必须先建立流。常见的建立流的场景包括:

    1. 从集合建立Collections.stream()
    2. 从数组中建立 Steam.of()
    3. 使用生成器无中生有的生成: Stream.generate()
    4. 空的stream : Stream.empty()

    流操作

    流操作也称之为流转换,就是把一个流转成另一个流。比如我们常见的map, filter之类。
    flatmap比较高级,就是处理流的时候,生成的流中的每个元素又是一个流。我们可以使用flatmap将这其中的每个元素的又再次地展开,大概的伪代码应该是

    FLAT_xxxx : get-one-item() {
        if (current_stream is null) { 
            current_stream  = get-one-item(up_stream);
        }
       while (not end-of-stream (current-stream)) {
          var retval = get_one_item(current-stream);
          if (end-of-stream(retval)) {
              current-stream  = get-one-item(upstream);
          } else {
           return retval;
         }
       }
    
      return END-OF-STREAM;
    

    作为比较,map依赖的大概样子是这样:

    xxxx : get-one-item() {
          return get_one_item(up-stream);
     }
    

    其它也很常见的流操作包括了

    1. 提取子流
    2. 组合流

    获取结果

    最终问题获取结果,获取的结果也可以是一个流,也可以是对流进行聚合,比如reduce,或者sum, max, min, average类型的操作。

    Optional类型

    在对stream进行操作时,对于存在性(有值或者没有值)的返回,我们可以返回一个值,或者没有找到时返回一个替代值,替代值可以是空值,也可以是任何其它的东西。Optional就是为了简化这个操作,Optional也可以再次被当作是一个stream,它要么产生一个实际的元素,要么啥也没有。

    Optional的典型操作

    1. 获取里面的值, Optional.get()
    2. 直接进行操作,Optinal.ifPresent()
    3. 拿它来流使,Optional.map()
    4. 值与替代值的获取, Optional.orElse(), Optional.orElseGet(), Optional.orElseThrow()

    获取结果的操作说简单非常简单,说复杂是因为java把个collection的概念做得复杂庞大。所以简单分类就是:

    1. 聚合类操作,直接返回一个值或者几个值,这包括了reduce,summarizing(Int | Long | Double)之类;
    2. 放到一个数组中
    3. 放到一个集合中,这里面的变数最多。

    相关文章

      网友评论

          本文标题:JAVA笔记#02 stream处理

          本文链接:https://www.haomeiwen.com/subject/hhdzehtx.html