【发布时间】:2020-06-09 23:56:53
【问题描述】:
我正在构建一个需要流的先前值和当前值的函数。
我设法解决了这个问题,但我想知道这是否是检索倒数第二个值的某种方法。
【问题讨论】:
我正在构建一个需要流的先前值和当前值的函数。
我设法解决了这个问题,但我想知道这是否是检索倒数第二个值的某种方法。
【问题讨论】:
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 他们并在一个流中获取所有内容。
【讨论】: