到目前為止,我們都是将整數收集到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方法:
與對象流一樣,我們還可以使用靜态的generate和iterate方法。此外,IntStream和LongStream有靜态方法range和rangeClosed,可以生成步長為1的整數範圍:
CharSequence接口擁有codePoints和chars方法,可以生成由字元的Unicode碼或由UTF-16編碼機制的碼元構成的IntStream。(請參見第2章以了解其複雜的細節。)
當你有一個對象流時,可以用mapToInt、mapToLong和mapToDouble将其轉換為基本類型流。例如,如果你有一個字元串流,并想将其長度處理為整數,那麼就可以在IntStream中實作此目的:
為了将基本類型流轉換為對象流,需要使用boxed方法:
程式清單1-7給出了基本類型流的API的示例。
程式清單1-7 streams/PrimitiveTypeStreams.java
java.util.stream.IntStream 8
java.util.stream.DoubleStream 8