Collectors.toList() 中 LongStream VS Stream 的区别
Difference LongStream VS Stream in Collectors.toList()
为什么当我从 LongStream
Collectors.toList()
获取列表时出现错误,但 Stream
没有错误?
示例:
错误:
Something.mapToLong(Long::parseLong).collect(Collectors.toList())
正确:
Something.map(Long::valueOf).collect(Collectors.toList())
Stream API 中有四个不同的 class:Stream
、IntStream
、LongStream
和 DoubleStream
。后三个用于处理原始值 int
、long
和 double
以获得更好的性能。它们是为这些原始类型量身定制的,它们的方法与 Stream
方法有很大不同。例如,有一个 LongStream.sum()
方法,但没有 Stream.sum()
方法,因为您不能对任何类型的对象求和。原始流不适用于收集器,因为收集器正在接受对象(JDK 中没有特殊的原始收集器)。
Stream
class 可用于处理任何对象,包括原始类型包装器 class 像 Integer
、Long
和 Double
.因为你想收集到 List<Long>
,所以你不需要 long
原语流,而是 Long
对象流。所以你需要 Stream<Long>
和 map
而不是 mapToLong
。 mapToLong
可能很有用,例如,如果您需要原始 long[]
数组:
long[] result = Something.mapToLong(Long::valueOf).toArray();
为什么当我从 LongStream
Collectors.toList()
获取列表时出现错误,但 Stream
没有错误?
示例:
错误:
Something.mapToLong(Long::parseLong).collect(Collectors.toList())
正确:
Something.map(Long::valueOf).collect(Collectors.toList())
Stream API 中有四个不同的 class:Stream
、IntStream
、LongStream
和 DoubleStream
。后三个用于处理原始值 int
、long
和 double
以获得更好的性能。它们是为这些原始类型量身定制的,它们的方法与 Stream
方法有很大不同。例如,有一个 LongStream.sum()
方法,但没有 Stream.sum()
方法,因为您不能对任何类型的对象求和。原始流不适用于收集器,因为收集器正在接受对象(JDK 中没有特殊的原始收集器)。
Stream
class 可用于处理任何对象,包括原始类型包装器 class 像 Integer
、Long
和 Double
.因为你想收集到 List<Long>
,所以你不需要 long
原语流,而是 Long
对象流。所以你需要 Stream<Long>
和 map
而不是 mapToLong
。 mapToLong
可能很有用,例如,如果您需要原始 long[]
数组:
long[] result = Something.mapToLong(Long::valueOf).toArray();