我有一些按预期返回 Stream 的代码,但也许可以用某种类型的 lambda 或 stream() 操作替换它,而不是耗尽 a 中的迭代器while
loop?
它只是一种交替流中元素的方法first
and second
当其中一个元素耗尽时停止。
public static <T>Stream<T> alternatingSequence(Stream<T> first, Stream<T> second){
Iterator<T> iteratorFirst = first.iterator();
Iterator<T> iteratorSecond = second.iterator();
Stream<T> resultStream = Stream.empty();
while (iteratorFirst.hasNext() && iteratorSecond.hasNext()){
resultStream = Stream.concat(resultStream, Stream.of(iteratorFirst.next(), iteratorSecond.next()));
}
return resultStream;
}
}
Using Guava 的 Streams.zip https://google.github.io/guava/releases/21.0/api/docs/com/google/common/collect/Streams.html#zip-java.util.stream.Stream-java.util.stream.Stream-java.util.function.BiFunction-您可以将两个流组合成一个二元素流,然后您可以简单地将其展平以产生交替序列:
return Streams.zip(first, second, (arg1, arg2) -> Stream.of(arg1, arg2))
.flatMap(Function.identity());
需要注意的是,生成的流不能有效地拆分(请参阅链接的文档)。这可能会损害并行性能。
Note:
如果您无法访问 Guava 那么您可以实现自己的zip(a, b, bifunc)
如图所示here https://stackoverflow.com/a/23529010/7098259.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)