Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 收集器中的LongStream与Stream之间的差异。toList()_Java_Java 8_Java Stream_Collectors - Fatal编程技术网

Java 收集器中的LongStream与Stream之间的差异。toList()

Java 收集器中的LongStream与Stream之间的差异。toList(),java,java-8,java-stream,collectors,Java,Java 8,Java Stream,Collectors,为什么当我使用collector从LongStream获取列表时,toList()出现错误,但是使用Stream没有错误 示例: 错误: Something.mapToLong(Long::parseLong).collect(Collectors.toList()) 正确: Something.map(Long::valueOf).collect(Collectors.toList()) 流API中有四个不同的类:Stream、IntStream、LongStream和DoubleStre

为什么当我使用
collector从
LongStream
获取列表时,toList()
出现错误,但是使用
Stream
没有错误

示例:

错误:

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

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

流API中有四个不同的类:
Stream
IntStream
LongStream
DoubleStream
。后三个用于处理原始值
int
long
double
,以获得更好的性能。它们是为这些基本类型定制的,它们的方法与
方法有很大不同。例如,有一个
LongStream.sum()
方法,但没有
Stream.sum()
方法,因为不能对任何类型的对象求和。基本流不能与收集器一起工作,因为收集器接受对象(JDK中没有特殊的基本流收集器)

Stream
类可用于处理任何对象,包括基本类型的包装类,如
Integer
Long
Double
。由于要收集到
列表
,因此不需要
long
原语流,而是需要
long
对象流。因此,您需要
映射
,而不是
mapToLong
mapToLong
可能很有用,例如,如果您需要一个基本
long[]
数组:

long[] result = Something.mapToLong(Long::valueOf).toArray();

我不熟悉Java流操作,但是我可以添加这个吗?如果您已经有一个原语流(例如,
LongStream
),并且希望使用
collect(Collectors.toList())
与流一起使用,则可以首先使用
stream.boxed()
操作在流中装箱原语。这是
aLongStream.boxed().collect(Collectors.toList())