官术网_书友最值得收藏!

1.8 收集結果

當處理完流之后,通常會想要查看其元素。此時可以調用iterator方法,它會產生可以用來訪問元素的舊式風格的迭代器。

或者,可以調用forEach方法,將某個函數應用于每個元素:

在并行流上,forEach方法會以任意順序遍歷各個元素。如果想要按照流中的順序來處理它們,可以調用forEachOrdered方法。當然,這個方法會喪失并行處理的部分甚至全部優勢。

但是,更常見的情況是,我們想要將結果收集到數據結構中。此時,可以調用toArray,獲得由流的元素構成的數組。

因為無法在運行時創建泛型數組,所以表達式stream.toArray()會返回一個Object[]數組。如果想要讓數組具有正確的類型,可以將其傳遞到數組構造器中:

針對將流中的元素收集到另一個目標中,有一個便捷方法collect可用,它會接受一個Collector接口的實例。Collectors類提供了大量用于生成公共收集器的工廠方法。為了將流收集到列表或集中,可以直接調用

如果想要控制獲得的集的種類,那么可以使用下面的調用:

假設想要通過連接操作來收集流中的所有字符串。我們可以調用

如果想要在元素之間增加分隔符,可以將分隔符傳遞給joining方法:

如果流中包含除字符串以外的其他對象,那么我們需要現將其轉換為字符串,就像下面這樣:

如果想要將流的結果約簡為總和、平均值、最大值或最小值,可以使用summarizing(Int|Long|Double)方法中的某一個。這些方法會接受一個將流對象映射為數據的函數,同時,這些方法會產生類型為(Int|Long|Double)SummaryStatistics的結果,同時計算總和、數量、平均值、最小值和最大值。

java.util.stream.BaseStream 8

·Iterator<T>iterator()

產生一個用于獲取當前流中各個元素的迭代器。這是一種終結操作。

程序清單1-4中的示例程序展示了如何從流中收集元素。

程序清單1-4 collecting/CollectingResults.java

java.util.stream.Stream 8

·void forEach(Consumer<?super T>action)

在流的每個元素上調用action。這是一種終結操作。

·Object[]toArray()

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

產生一個對象數組,或者在將引用A[]::new傳遞給構造器時,返回一個A類型的數組。這些操作都是終結操作。

·<R,A>R collect(Collector<?super T,A,R>collector)

使用給定的收集器來收集當前流中的元素。Collectors類有用于多種收集器的工廠方法。

java.util.stream.Collectors 8

·static<T>Collector<T,?,List<T>>toList()

·static<T>Collector<T,?,Set<T>>toSet()

產生一個將元素收集到列表或集中的收集器。

·static<T,C extends Collection<T>>Collector<T,?,C>toCollection(Supplier<C>collectionFactory)

產生一個將元素收集到任意集合中的收集器。可以傳遞一個諸如TreeSet::new的構造器引用。?

·static Collector<CharSequence,?,String>joining()

·static Collector<CharSequence,?,String>joining(CharSequence delimiter)

·static Collector<CharSequence,?,String>joining(CharSequence delimiter,CharSequence pref ix,CharSequence suff ix)

產生一個連接字符串的收集器。分隔符會置于字符串之間,而第一個字符串之前可以有前綴,最后一個字符串之后可以有后綴。如果沒有指定,那么它們都為空。

·static<T>Collector<T,?,IntSummaryStatistics>summarizingInt(ToIntFunction<?super T>mapper)

·static<T>Collector<T,?,LongSummaryStatistics>summarizingLong(ToLongFunction<?superT>mapper)

·static<T>Collector<T,?,DoubleSummaryStatistics>summarizingDouble(ToDoubleFunction<?super T>mapper)

產生能夠生成(Int|Long|Double)SummaryStatistics對象的收集器,通過它可以獲得將mapper應用于每個元素后所產生的結果的個數、總和、平均值、最大值和最小值。

IntSummaryStatistics 8
LongSummaryStatistics 8
DoubleSummaryStatistics 8

·long getCount()

產生匯總后的元素的個數。

·(int|long|double)getSum()

·double getAverage()

產生匯總后的元素的總和或平均值,或者在沒有任何元素時返回0。

·(int|long|double)getMax()

·(int|long|double)getMin()

產生匯總后的元素的最大值和最小值,或者在沒有任何元素時,產生(Integer|Long|Double).(MAX|MIN)_VALUE。

主站蜘蛛池模板: 新竹市| 衡水市| 台北市| 新龙县| 浮山县| 弋阳县| 罗平县| 视频| 邻水| 台北市| 曲周县| 高陵县| 永靖县| 揭东县| 大埔县| 宁波市| 米林县| 沙坪坝区| 城口县| 阜南县| 福建省| 凤城市| 济阳县| 南涧| 湘乡市| 兰州市| 平度市| 贵港市| 蓬莱市| 辽阳县| 肇源县| 汉中市| 左权县| 蒙自县| 辽源市| 四川省| 平乐县| 彰化县| 修文县| 娱乐| 伊川县|