Java8 Stream瞭解

Stream

Stream的創建方式

  1. 通過Collection系列集合提供

    List<String> list = new ArrayList<>();
    Stream<String> stream1 = list.stream();
    
  2. 通過Arrays中的靜態方法獲取數組流

    String[] emps = new String[10];
    Stream<String> stream2 = Arrays.stream(emps);
    
  3. 通過Stream類中的靜態方法of()

    Stream<String> stream3 = Stream.of("aa", "bb", "cc");
    
  4. 創建無限流

    1. 迭代

      Stream<Integer> stream4 = Stream.iterate(0, x -> x + 2);
      
    2. 生成

      Stream.generate(() -> Math.random())
      

中間操作

  1. 篩選與切片

    1. filter

      stream.filter(Predicate)
      
    2. limit

      stream.filter(long)
      
    3. skip

      stream.skip(long)
      
    4. distinct

      通過hashcode(),equals()進行去重

      stream.distinct()
      
  2. 映射

    1. map

      將元素轉換成其他形式或提取信息。map中的Function本身也會返回一個流。

      map(Function)
      
    2. flatMap

      會整合Function本身返回的流。

      flatMap(Function)
      
  3. 排序

    1. sorted()

      自然排序

      stream.sorted()
      
    2. sorted(Comparator)

      定製排序,指定Comparator

      stream.sorted(Comparator)
      

終止操作

  1. 查找與匹配

    • allMatch

      檢查是否匹配所有元素

    stream.allMatch()
    
    • anyMatch

      檢查是否至少匹配一個元素

    • nonMatch

      檢查是否沒有匹配所有元素

    • findFisrt()

      返回第一個元素

    • findAny

      返回當前流中的任意元素

    • count

      返回流中的元素的個數

    • max(Comparator)

      返回流中的最大值

    • min(Comparator)

      返回流中的最小值

  2. 歸約

    • reduce(T, BinaryOperator)

      將流中的元素反覆結合起來,得到一個新值。

      Stream.of(1,2,3,4,5).reduce(0, (x, y) -> x + y)
      
  3. 收集

    • collect(Collector)

      將流轉換爲其他形式,包括轉換,分組,分區等

      Stream.of("11", "aa", "bb").collect(Collectors.toSet());
      Stream.of("11", "aa", "bb").collect(Collectors.coutning());
      
      ...
      

並行流與串行流

瞭解使用Fork/Join框架

Stream可以使用parallel()與sequential()切換並行流與順序流。

特點

  • 惰性求值
  • 內部迭代
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章