9

为什么当我从一个有错误但没有错误的列表中获取LongStream列表Collectors.toList()Stream

例子 :

错误 :

Something.mapToLong(Long::parseLong).collect(Collectors.toList())

正确的 :

Something.map(Long::valueOf).collect(Collectors.toList())
4

1 回答 1

13

Stream API 中有四个不同的类:StreamIntStream和。后三个用于处理原始值,以获得更好的性能。它们是为这些原始类型量身定制的,它们的方法与方法有很大不同。例如,有一个方法,但没有方法,因为你不能对任何类型的对象求和。原始流不适用于收集器,因为收集器正在接受对象(JDK 中没有特殊的原始收集器)。LongStreamDoubleStreamintlongdoubleStreamLongStream.sum()Stream.sum()

该类Stream可用于处理任何对象,包括原始类型包装类Integer,如LongDouble。当您想收集到 时List<Long>,您不需要long原始流,而是Long对象流。所以你需要Stream<Long>andmap而不是mapToLong. 可能很有用mapToLong,例如,如果您需要一个原始long[]数组:

long[] result = Something.mapToLong(Long::valueOf).toArray();
于 2015-08-12T05:02:56.723 回答