Collectors.toList()中的差异LongStream VS流

Omi*_*uri 7 java java-8 java-stream collectors

为什么当我从得到一个列表LongStreamCollectors.toList()了一个错误,但有Stream没有错误?

例子 :

错误:

Something.mapToLong(Long::parseLong).collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)

正确:

Something.map(Long::valueOf).collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)

Tag*_*eev 9

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

Stream类可以被用于处理包括基本类型的包装类等的任何对象Integer,Long并且Double.正如您想要收集的那样List<Long>,那么您不需要long基元流,而是需要Long对象流.所以你需要Stream<Long>map不是mapToLong.在mapToLong可能是有用的,例如,如果你需要一个原始long[]数组:

long[] result = Something.mapToLong(Long::valueOf).toArray();
Run Code Online (Sandbox Code Playgroud)