java - 从流中收集连续对

标签 java java-8 java-stream

给定一个流,例如 { 0, 1, 2, 3, 4 },

我怎样才能最优雅地将它转换成给定的形式:

{ new Pair(0, 1), new Pair(1, 2), new Pair(2, 3), new Pair(3, 4) }

(当然,假设我已经定义了类 Pair)?

编辑:这并不是严格意义上的整数或原始流。对于任何类型的流,答案都应该是通用的。

最佳答案

Java 8 流库主要用于将流拆分为更小的 block 以进行并行处理,因此有状态的管道阶段非常有限,并且不支持获取当前流元素的索引和访问相邻流元素等操作。

解决这些问题的典型方法,当然,有一些限制,是通过索引来驱动流,并依赖于在一些随机访问数据结构中处理值,比如可以从中检索元素的 ArrayList .如果值在 arrayList 中,则可以通过执行以下操作生成所请求的对:

    IntStream.range(1, arrayList.size())
             .mapToObj(i -> new Pair(arrayList.get(i-1), arrayList.get(i)))
             .forEach(System.out::println);

当然限制是输入不能是无限流。不过,此管道可以并行运行。

关于java - 从流中收集连续对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20470010/

相关文章:

java - 加载.jar资源时使用ClassLoader

java - JVM/代码调整以减少 JVM 挂起时间

java - 在列表列表中找到最小大小的列表

java - 保持 TrayDialog 打开并提交数据

java - 使用大型数据结构时,避免 Java(eclipse) 中的 "out of memory error"吗?

java - "delegation"如何帮助线程安全类?

java - 使用 Jacob 获取打开的 Word 文档的内容

java - 使用 Java8 Streams API 实现二分查找

java - 将复杂的 while 循环重构为 Java 8 流

java - 为什么静态初始化程序中带有 lambda 的并行流会导致死锁?