建立Stream方式一: 集合類的stream()或 parallelStream()java
List<String> list = new ArrayList<>(); Stream<String> stream = list.stream();
建立Stream方式二: 經過Arrays中的靜態方法stream()獲取dom
String[] strings = new String[10]; Stream<String> stream1 = Arrays.stream(strings);
建立Stream方式三: 經過Stream 類中的靜態方法of()
java Stream<String> stream2 = Stream.of("aa", "bb", "cc");
ide
建立Stream方式四: 無限流
迭代:
java Stream<Integer> stream3 = Stream.iterate(0, (x) -> x + 2);
生成:
java Stream.generate(() -> Math.random());
函數
篩選和切片
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
Optional
例如: 計算list中全部元素的和
過程 0 + 1 = 1 + 2 = 3 + .....
List
Integer reduce = list1.stream().reduce(0, (x, y) -> x + y);
System.out.println(reduce); //21
並行流 就是把一個內容分紅多個數據塊,並用不一樣的線程分別處理每一個數據塊的流。Java 8 中將並行進行了優化,咱們能夠很容易的對數據進行並行操做。Stream API 能夠聲明性地經過 parallel() 與sequential() 在並行流與順序流之間進行切換。接口