java - Collectors.toList() 中 LongStream VS Stream 的区别

标签 java java-8 java-stream collectors

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

例子:

错误:

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

正确:

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

最佳答案

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

Stream类可用于处理任何对象,包括原始类型包装类,如 Integer , LongDouble .如你所愿 Collection 到List<Long> , 那么你不需要 long 的流原语,但是 Long 的流对象。所以你需要 Stream<Long>map而不是 mapToLong . mapToLong可能很有用,例如,如果您需要原始 long[]数组:

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

关于java - Collectors.toList() 中 LongStream VS Stream 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31892821/

相关文章:

java-8 - 与从迭代器创建的流的并行性

java - 无法在 IntStream 上应用 Collectors.groupingBy

java - Hibernate:分离的实体传递到持久化

spring-boot - 循环运行的 Spring Batch 读取步骤

java - 如何在从 github 克隆的 eclipse 项目中包含 JRE 库

java - 线程之间的内存共享

java - 如何在 java8 中使用流重写以下代码

java - Collectors.toSet() 中的哪个 Set 实现?

java - android 4.3 BLE 设备在多次连接尝试后自动断开连接

java - 如何在 Android 中以编程方式注册服务?