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

1.13 基本類型流

到目前為止,我們都是將整數收集到Stream<Integer>中,盡管很明顯,將每個整數都包裝到包裝器對象中是很低效的。對其他基本類型來說,情況也是一樣,這些基本類型是:double、float、long、short、char、byte和boolean。流庫中具有專門的類型IntStream、LongStream和DoubleStream,用來直接存儲基本類型值,而無需使用包裝器。如果想要存儲short、char、byte和boolean,可以使用IntStream,而對于float,可以使用DoubleStream。

為了創建IntStream,需要調用IntStream.of和Arrays.stream方法:

與對象流一樣,我們還可以使用靜態的generate和iterate方法。此外,IntStream和LongStream有靜態方法range和rangeClosed,可以生成步長為1的整數范圍:

CharSequence接口擁有codePoints和chars方法,可以生成由字符的Unicode碼或由UTF-16編碼機制的碼元構成的IntStream。(請參見第2章以了解其復雜的細節。)

當你有一個對象流時,可以用mapToInt、mapToLong和mapToDouble將其轉換為基本類型流。例如,如果你有一個字符串流,并想將其長度處理為整數,那么就可以在IntStream中實現此目的:

為了將基本類型流轉換為對象流,需要使用boxed方法:

通常,基本類型流上的方法與對象流上的方法類似。下面是最主要的差異:

·toArray方法會返回基本類型數組。

·產生可選結果的方法會返回一個OptionalInt、OptionalLong或OptionalDouble。這些類與Optional類類似,但是具有getAsInt、getAsLong和getAsDouble方法,而不是get方法。

·具有返回總和、平均值、最大值和最小值的sum、average、max和min方法。對象流沒有定義這些方法。

·summaryStatistics方法會產生一個類型為IntSummaryStatistics、LongSummary-Statistics或DoubleSummaryStatistics的對象,它們可以同時報告流的總和、平均值、最大值和最小值。

注意:Random類具有ints、longs和doubles方法,它們會返回由隨機數構成的基本類型流。

程序清單1-7給出了基本類型流的API的示例。

程序清單1-7 streams/PrimitiveTypeStreams.java

java.util.stream.IntStream 8

·static IntStream range(int startInclusive,int endExclusive)

·static IntStream rangeClosed(int startInclusive,int endInclusive)

產生一個由給定范圍內的整數構成的IntStream。

·static IntStream of(int...values)

產生一個由給定元素構成的IntStream。

·int[]toArray()

產生一個由當前流中的元素構成的數組。

·int sum()

·OptionalDouble average()

·OptionalInt max()

·OptionalInt min()

·IntSummaryStatistics summaryStatistics()

產生當前流中元素的總和、平均值、最大值和最小值,或者從中可以獲得這些結果的所有四種值的對象。

·Stream<Integer>boxed()

產生用于當前流中的元素的包裝器對象流。

java.util.stream.LongStream 8

·static LongStream range(long startInclusive,long endExclusive)

·static LongStream rangeClosed(long startInclusive,long endInclusive)

用給定范圍內的整數產生一個LongStream。

·static LongStream of(long...values)

用給定元素產生一個LongStream。

·long[]toArray()

用當前流中的元素產生一個數組。

·long sum()

·OptionalDouble average()

·OptionalLong max()

·OptionalLong min()

·LongSummaryStatistics summaryStatistics()

產生當前流中元素的總和、平均值、最大值和最小值,或者從中可以獲得這些結果的所有四種值的對象。

·Streamboxed()

產生用于當前流中的元素的包裝器對象流。

java.util.stream.DoubleStream 8

·static DoubleStream of(double...values)

用給定元素產生一個DoubleStream。

·double[]toArray()

用當前流中的元素產生一個數組。

·double sum()

·OptionalDouble average()

·OptionalDouble max()

·OptionalDouble min()

·DoubleSummaryStatistics summaryStatistics()

產生當前流中元素的總和、平均值、最大值和最小值,或者從中可以獲得這些結果的所有四種值的對象。

·Stream<Double>boxed()

產生用于當前流中的元素的包裝器對象流。

java.lang.CharSequence 1.0

·IntStream codePoints()8

產生由當前字符串的所有Unicode碼點構成的流。

java.util.Random 1.0

·IntStream ints()

·IntStream ints(int randomNumberOrigin,int randomNumberBound)8

·IntStream ints(long streamSize)8

·IntStream ints(long streamSize,int randomNumberOrigin,int randomNumberBound)8

·LongStream longs()8

·LongStream longs(long randomNumberOrigin,long randomNumberBound)8

·LongStream longs(long streamSize)8

·LongStream longs(long streamSize,long randomNumberOrigin,long randomNumberBound)8

·DoubleStream doubles()8

·DoubleStream doubles(double randomNumberOrigin,double randomNumberBound)8

·DoubleStream doubles(long streamSize)8

·DoubleStream doubles(long streamSize,double randomNumberOrigin,double randomNumberBound)8

產生隨機數流。如果提供了streamSize,這個流就是具有給定數量元素的有限流。當提供了邊界時,其元素將位于randomNumberOrigin(包含)和randomNumberBound(不包含)的區間內。

java.util.Optional(Int|Long|Double)8

·static Optional(Int|Long|Double)of((int|long|double)value)

用所提供的基本類型值產生一個可選對象。

·(int|long|double)getAs(Int|Long|Double)()

產生當前可選對象的值,或者在其為空時拋出一個NoSuchElementException異常。

·(int|long|double)orElse((int|long|double)other)

·(int|long|double)orElseGet((Int|Long|Double)Supplier other)

產生當前可選對象的值,或者在這個對象為空時產生可替代的值。

·void ifPresent((Int|Long|Double)Consumer consumer)

如果當前可選對象不為空,則將其值傳遞給consumer。

java.util.(Int|Long|Double)SummaryStatistics 8

·long getCount()

·(int|long|double)getSum()

·double getAverage()

·(int|long|double)getMax()

·(int|long|double)getMin()

產生收集到的元素的個數、總和、平均值、最大值和最小值。

主站蜘蛛池模板: 禹城市| 新化县| 台东市| 柳林县| 万年县| 长沙县| 华池县| 榆中县| 苏州市| 葫芦岛市| 漳平市| 称多县| 东宁县| 凌海市| 象州县| 太仓市| 伊金霍洛旗| 绥棱县| 泌阳县| 尼玛县| 太白县| 长宁区| 东莞市| 稷山县| 隆林| 西华县| 平阴县| 开鲁县| 安泽县| 大同市| 洪江市| 漳州市| 广德县| 海丰县| 伊宁县| 合肥市| 莆田市| 襄垣县| 寿阳县| 长子县| 阳城县|