我可以检索一个流的第二个到最后一个值吗?

问题描述 投票:0回答:1

我正在构建一个需要流的前一个值和当前值的函数,我设法解决了这个问题,但我想知道是否有办法检索它的第二个到最后一个值。

我设法解决了这个问题,但我想知道是否有一些方法可以检索它的第二个到最后一个值。

flutter stream
1个回答
1
投票

你可以使用 rxdart pairwise:

RangeStream(1, 4)
  .pairwise()
  .listen(print); // prints [1, 2], [2, 3], [3, 4]

你总是会得到一个 List 含有当前发射的值和最后一个值。只是要注意,只有在有2个项目要发射后才会发射,所以如果你需要尽快得到第一个值,这可能不是最好的解决方案。

解决这个问题的一个简单方法是将发射的值保存到一个外部变量中,这通常不是很推荐,因为Streams应该是从外部代码中封装出来的,但对于许多情况下,这将是更简单的。

如果你真的需要第一个值,你可以复制你的流,只消耗一次第一个值,然后让 pairwise() 做它的魔力,这里有一个解决方案,使用的是 asyncrxdart 包。

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 他们,并在一个流中得到所有的。

© www.soinside.com 2019 - 2024. All rights reserved.