天天看點

《Java核心技術 卷Ⅱ 進階特性(原書第10版)》一1.13 基本類型流

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

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

《Java核心技術 卷Ⅱ 進階特性(原書第10版)》一1.13 基本類型流

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

《Java核心技術 卷Ⅱ 進階特性(原書第10版)》一1.13 基本類型流

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

《Java核心技術 卷Ⅱ 進階特性(原書第10版)》一1.13 基本類型流

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

《Java核心技術 卷Ⅱ 進階特性(原書第10版)》一1.13 基本類型流

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

《Java核心技術 卷Ⅱ 進階特性(原書第10版)》一1.13 基本類型流
《Java核心技術 卷Ⅱ 進階特性(原書第10版)》一1.13 基本類型流

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

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

《Java核心技術 卷Ⅱ 進階特性(原書第10版)》一1.13 基本類型流
《Java核心技術 卷Ⅱ 進階特性(原書第10版)》一1.13 基本類型流

java.util.stream.IntStream 8

《Java核心技術 卷Ⅱ 進階特性(原書第10版)》一1.13 基本類型流

java.util.stream.DoubleStream 8

《Java核心技術 卷Ⅱ 進階特性(原書第10版)》一1.13 基本類型流
《Java核心技術 卷Ⅱ 進階特性(原書第10版)》一1.13 基本類型流
《Java核心技術 卷Ⅱ 進階特性(原書第10版)》一1.13 基本類型流