[英]Difference LongStream VS Stream in Collectors.toList()
為什么當我從具有Collectors.toList()
的LongStream
獲取列表時出現錯誤,但是使用Stream
時沒有錯誤?
例子 :
錯誤:
Something.mapToLong(Long::parseLong).collect(Collectors.toList())
正確:
Something.map(Long::valueOf).collect(Collectors.toList())
Stream API中有四個不同的類: Stream
, IntStream
, LongStream
和DoubleStream
。 后三者用於處理原始值int
, long
和double
以獲得更好的性能。 它們是針對這些原始類型而定制的,它們的方法與Stream
方法有很大不同。 例如,有一個LongStream.sum()
方法,但是沒有Stream.sum()
方法,因為你不能對任何類型的對象求和。 由於收集器正在接受對象(JDK中沒有特殊的原始收集器),原始流不能與收集器一起使用。
Stream
類可用於處理任何對象,包括原始類型包裝類,如Integer
, Long
和Double
。 如果要收集到List<Long>
,則不需要long
基元流,而是需要Long
對象流。 所以你需要Stream<Long>
和map
而不是mapToLong
。 mapToLong
可能很有用,例如,如果你需要一個原始的long[]
數組:
long[] result = Something.mapToLong(Long::valueOf).toArray();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.