我正在构建一个需要流的前一个值和当前值的函数,我设法解决了这个问题,但我想知道是否有办法检索它的第二个到最后一个值。
我设法解决了这个问题,但我想知道是否有一些方法可以检索它的第二个到最后一个值。
RangeStream(1, 4)
.pairwise()
.listen(print); // prints [1, 2], [2, 3], [3, 4]
你总是会得到一个 List
含有当前发射的值和最后一个值。只是要注意,只有在有2个项目要发射后才会发射,所以如果你需要尽快得到第一个值,这可能不是最好的解决方案。
解决这个问题的一个简单方法是将发射的值保存到一个外部变量中,这通常不是很推荐,因为Streams应该是从外部代码中封装出来的,但对于许多情况下,这将是更简单的。
如果你真的需要第一个值,你可以复制你的流,只消耗一次第一个值,然后让 pairwise()
做它的魔力,这里有一个解决方案,使用的是 async
和 rxdart
包。
Stream<int> stream = Stream.fromIterable([0, 1, 2, 3, 4, 5]);
List<Stream<int>> splitted = StreamSplitter.splitFrom(stream);
splitted[0].take(1).listen(print); // prints 0 immediately
splitted[1].pairwise().listen(print); // prints [0, 1], [1, 2], [2, 3], [3, 4], [4, 5]
当然,你也可以 merge
他们,并在一个流中得到所有的。