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())