为什么当我从LongStream
获取Collectors.toList()
的列表时出现错误但是Stream
没有错误?
示例:
错误:
Something.mapToLong(Long::parseLong).collect(Collectors.toList())
正确:
Something.map(Long::valueOf).collect(Collectors.toList())
答案 0 :(得分:7)
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();