java——集合篇——java.util.stream.Stream

簡單瞭解爲什麼需要 Stream

Stream 作爲 Java 8 的一大亮點,它與 java.io 包裏的 InputStream 和 OutputStream 是完全不同的概念。它也不同於 StAX 對 XML 解析的 Stream,也不是 Amazon Kinesis 對大數據實時處理的 Stream。Java 8 中的 Stream 是對集合(Collection)對象功能的增強,它專注於對集合對象進行各種非常便利、高效的聚合操作(aggregate operation),或者大批量數據操作 (bulk data operation)。Stream API 藉助於同樣新出現的 Lambda 表達式,極大的提高編程效率和程序可讀性。同時它提供串行和並行兩種模式進行匯聚操作,併發模式能夠充分利用多核處理器的優勢,使用 fork/join 並行方式來拆分任務和加速處理過程。通常編寫並行代碼很難而且容易出錯, 但使用 Stream API 無需編寫一行多線程的代碼,就可以很方便地寫出高性能的併發程序。所以說,Java 8 中首次出現的 java.util.stream 是一個函數式語言+多核時代綜合影響的產物。

什麼是聚合操作

在傳統的 J2EE 應用中,Java 代碼經常不得不依賴於關係型數據庫的聚合操作來完成諸如:

客戶每月平均消費金額
最昂貴的在售商品
本週完成的有效訂單(排除了無效的)
取十個數據樣本作爲首頁推薦
這類的操作。

舉例說明

但在當今這個數據大爆炸的時代,在數據來源多樣化、數據海量化的今天,很多時候不得不脫離 RDBMS,或者以底層返回的數據爲基礎進行更上層的數據統計。而 Java 的集合 API 中,僅僅有極少量的輔助型方法,更多的時候是程序員需要用 Iterator 來遍歷集合,完成相關的聚合應用邏輯。這是一種遠不夠高效、笨拙的方法。

public interface Stream<T> extends BaseStream<T,Stream<T>>

方法概要

修飾符和類型 方法 說明
boolean allMatch(Predicate<? super T> predicate) 返回此流的所有元素是否與提供的謂詞匹配。
boolean anyMatch(Predicate<? super T> predicate) 返回此流的任何元素是否與提供的謂詞匹配
static <T> Stream.Builder<T> builder() 返回的構建器Stream
<R,A> R collect(Collector<? super T,A,R> collector) 使用對此流的元素執行可變還原操作 Collector
<R> R collect(Supplier<R> supplier, BiConsumer<R,? super T> accumulator, BiConsumer<R,R> combiner) 在此流的元素上執行可變的歸約運算。
static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b) 創建一個延遲串聯的流,其元素是第一個流的所有元素,然後是第二個流的所有元素。
long count() 返回此流中的元素計數。
Stream<T> distinct()

 

返回由該流的不同元素組成的流(根據 Object.equals(Object))。
static <T> Stream<T> empty() 返回一個空序列Stream
Stream<T> filter(Predicate<? super T> predicate) 返回一個流,該流包含與給定謂詞匹配的該流的元素。
Optional<T> findAny()

返回Optional描述流中某些元素的描述;Optional如果流爲空,則返回空。

 
Optional<T> findFirst()

返回Optional描述此流的第一個元素的描述;Optional如果流爲空,則返回null 。

 
<R> Stream<R> flatMap(Function<? super T,? extends Stream<? extends R>> mapper)

返回一個流,該流包括將流的每個元素替換爲通過將提供的映射函數應用於每個元素而生成的映射流的內容而得到的結果。

 
DoubleStream flatMapToDouble(Function<? super T,? extends DoubleStream> mapper)

返回一個DoubleStream結果,該結果由將該流的每個元素替換爲通過將所提供的映射函數應用於每個元素而生成的映射流的內容而得到的結果。

 
IntStream flatMapToInt(Function<? super T,? extends IntStream> mapper)

返回一個IntStream結果,該結果由將該流的每個元素替換爲通過將所提供的映射函數應用於每個元素而生成的映射流的內容而得到的結果。

 
LongStream flatMapToLong(Function<? super T,? extends LongStream> mapper)

返回一個LongStream結果,該結果由將該流的每個元素替換爲通過將所提供的映射函數應用於每個元素而生成的映射流的內容而得到的結果。

 
void forEach(Consumer<? super T> action)

爲此流的每個元素執行一個動作。

 
void forEachOrdered(Consumer<? super T> action)

如果流具有定義的遇到順序,則按流的遇到順序對此流的每個元素執行操作。

 
static <T> Stream<T> generate(Supplier<T> s)

返回無限的順序無序流,其中每個元素都由提供的生成Supplier

 
static <T> Stream<T> iterate(T seed, UnaryOperator<T> f)

返回一個無限連續有序Stream通過函數的迭代應用產生f爲初始元素seed,產生Stream包括seedf(seed), f(f(seed)),等。

 
Stream<T> limit(long maxSize)

返回由該流的元素組成的流,其maxSize長度被截斷爲不超過長度。

 
<R> Stream<R> map(Function<? super T,? extends R> mapper)

返回一個流,該流包括將給定函數應用於此流的元素的結果。

 
DoubleStream mapToDouble(ToDoubleFunction<? super T> mapper)

返回DoubleStream由將給定函數應用於此流的元素的結果組成的。

 
IntStream mapToInt(ToIntFunction<? super T> mapper)

返回IntStream由將給定函數應用於此流的元素的結果組成的。

 
LongStream mapToLong(ToLongFunction<? super T> mapper)

返回LongStream由將給定函數應用於此流的元素的結果組成的。

 
Optional<T> max(Comparator<? super T> comparator)

根據提供的返回此流的最大元素 Comparator

 
Optional<T> min(Comparator<? super T> comparator)

根據提供的返回此流的最小元素 Comparator

 
boolean noneMatch(Predicate<? super T> predicate)

返回此流中是否沒有元素與提供的謂詞匹配。

 
static <T> Stream<T> of(T... values)

返回其元素爲指定值的順序有序流。

 
static <T> Stream<T> of(T t)

返回Stream包含單個元素的序列。

 
Stream<T> peek(Consumer<? super T> action)

返回由該流的元素組成的流,並在從結果流中消耗元素時對每個元素另外執行提供的操作。

 
Optional<T> reduce(BinaryOperator<T> accumulator)

執行減少有關此流的元件,使用 締合累積功能,並返回一個Optional描述該減小值,如果有的話。

 
T reduce(T identity, BinaryOperator<T> accumulator)

使用提供的標識值和關聯 累加函數對此流的元素 執行歸約,然後返回歸約後的值。

 
<U> U reduce(U identity, BiFunction<U,? super T,U> accumulator, BinaryOperator<U> combiner)

執行減少有關此流的元件,使用所提供的身份,積累和組合功能。

 
Stream<T> skip(long n)

在丟棄流的第一個n元素之後,返回由該流的其餘元素組成的流。

 
Stream<T> sorted()

返回由該流的元素組成的流,並根據自然順序排序。

 
Stream<T> sorted(Comparator<? super T> comparator)

返回由該流的元素組成的流,並根據提供的進行排序Comparator

 
Object[] toArray()

返回包含此流元素的數組。

 
<A> A[] toArray(IntFunction<A[]> generator)

返回一個包含此流元素的數組,使用提供的generator函數分配返回的數組以及分區執行或調整大小可能需要的任何其他數組

 

 

 

 

 

 

 

 

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