流是Java API的新成員,它容許你以聲明性方式處理數據集合(經過查詢語句來表達,而不是臨時編寫一個實現)。就如今來講,你能夠把它們當作遍歷數據集的高級迭代器。此外,流還能夠透明地並行處理,你無需寫任何多線程代碼了!多線程
類別 | 方法名 | 方法簽名 | 做用 |
---|---|---|---|
篩選切片 | filter | Stream<T> filter(Predicate<? super T> predicate) | 過濾操做,根據Predicate判斷結果保留爲真的數據,返回結果仍然是流 |
distinct | Stream<T> distinct() | 去重操做,篩選出不重複的結果,返回結果仍然是流 | |
limit | Stream<T> limit(long maxSize) | 截取限制操做,只取前 maxSize條數據,返回結果仍然是流 | |
skip | Stream<T> skip(long n) | 跳過操做,跳過n條數據,取後面的數據,返回結果仍然是流 | |
映射 | map | <R> Stream<R> map(Function<? super T, ? extends R> mapper) | 轉化操做,根據參數T,轉化成R類型,返回結果仍然是流 |
flatMap | <R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper) | 轉化操做,根據參數T,轉化成R類型流,這裏會生成多個R類型流,返回結果仍然是流 | |
匹配 | anyMatch | boolean anyMatch(Predicate<? super T> predicate) | 判斷是否有一條匹配,根據Predicate判斷結果中是否有一條匹配成功 |
allMatch | boolean allMatch(Predicate<? super T> predicate) | 判斷是否全都匹配,根據Predicate判斷結果中是否所有匹配成功 | |
noneMatch | boolean noneMatch(Predicate<? super T> predicate) | 判斷是否一條都不匹配,根據Predicate判斷結果中是否全部的都不匹配 | |
查找 | findAny | Optional<T> findAny() | 查找操做, 查詢當前流中的任意元素並返回Optional |
findFirst | Optional<T> findFirst() | 查找操做, 查詢當前流中的第一個元素並返回Optional | |
歸約 | reduce | T reduce(T identity, BinaryOperator<T> accumulator); | 歸約操做,一樣兩個類型的數據進行操做後返回相同類型的結果。好比兩個整數相加、相乘等。 |
max | Optional<T> max(Comparator<? super T> comparator) | 求最大值,根據Comparator計算的比較結果獲得最大值 | |
min | Optional<T> min(Comparator<? super T> comparator) | 求最小值,根據Comparator計算的比較結果獲得最小值 | |
彙總統計 | collect | <R, A> R collect(Collector<? super T, A, R> collector) | 彙總操做,彙總對應的處理結果。這裏常常與 |
count | long count() | 統計流中數據數量 | |
遍歷 | foreach | void forEach(Consumer<? super T> action) | 遍歷操做,遍歷執行Consumer 對應的操做 |
上面是Stream API的一些經常使用操做,按場景結合lambda表達式調用對應方法便可。至於Stream的生成方式,Stream的of方法或者Collection接口實現類的stream方法均可以得到對應的流對象,再進一步根據須要作對應處理。app
另外上述方法若是返回是Stream對象時是能夠鏈式調用的,這個時候這個操做只是聲明或者配方,不產生新的集合,這種類型的方法是惰性求值方法;有些方法返回結果非Stream類型,則是及早求值方法。ide