给定一个流,例如 { 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/