Java8新特性 --Stream

1、 建立Stream

  1. 建立Stream方式一: 集合類的stream()或 parallelStream()java

    List<String> list = new ArrayList<>();
    Stream<String> stream = list.stream();
  2. 建立Stream方式二: 經過Arrays中的靜態方法stream()獲取dom

    String[] strings = new String[10];
    Stream<String> stream1 = Arrays.stream(strings);
  3. 建立Stream方式三: 經過Stream 類中的靜態方法of()
    java Stream<String> stream2 = Stream.of("aa", "bb", "cc");ide

  4. 建立Stream方式四: 無限流
    迭代:
    java Stream<Integer> stream3 = Stream.iterate(0, (x) -> x + 2);
    生成:
    java Stream.generate(() -> Math.random());函數

2、中間操做

  • 篩選和切片  
      filter 接受Lambda, 從stream中篩選出知足條件的元素。
      limit 限定stram中元素的數量。知足了limit數量之後,stream中之後的迭代終止,相似與短路操做。
      skip(n) 跳過元素,返回一個扔掉了前n個元素的stream。若stream中元素不足n個,則返回一個空stream。與limit(n)互補
      distinct 經過stream中元素的hashCode() 和 equels() 去除重複元素優化

  • 映射
      map 接受Lambda, 將元素轉換成其餘形式或提取信息。接受一個函數做爲參數,該函數會被應用到每一個元素上,並將其映射成一個新的元素。
      flatMap 接受一個函數做爲參數,將stream中的每一個值都換成另外一個stream,而後把全部的stream連成一個stream。線程

  • 排序
      sorted() 天然排序 按照Comparable排序
      sorted(Comparator com) 自定義排序 按照comparator排序code

  • 歸約
      T reduce(T identity, BinaryOperator accumulator);
      Optional reduce(BinaryOperator accumulator);
      例如: 計算list中全部元素的和
      過程 0 + 1 = 1 + 2 = 3 + .....
      List list1 = Arrays.asList(1,2,3,4,5,6);
      Integer reduce = list1.stream().reduce(0, (x, y) -> x + y);
      System.out.println(reduce); //21
    排序

  • 收集
     Optional max(Comparator<? super T> comparator);
     Collector 接口中方法的實現決定了如何對流執行收集操做(如收集到 List、Set、Map)。可是 Collectors 實用類提供了不少靜態法,能夠方便地建立常見收集器實例,具體方法與實例以下表:
      
      
    PS:
  1. 內部迭代: 迭代操做由Stream API完成
  2. 外部迭代: 本身寫Iteriator

3、 並行流與串行流

並行流 就是把一個內容分紅多個數據塊,並用不一樣的線程分別處理每一個數據塊的流。Java 8 中將並行進行了優化,咱們能夠很容易的對數據進行並行操做。Stream API 能夠聲明性地經過 parallel() 與sequential() 在並行流與順序流之間進行切換。接口

相關文章
相關標籤/搜索