【问题标题】:Can I retrieve the second to last value of a stream?我可以检索流的倒数第二个值吗?
【发布时间】:2020-06-09 23:56:53
【问题描述】:

我正在构建一个需要流的先前值和当前值的函数。

我设法解决了这个问题,但我想知道这是否是检索倒数第二个值的某种方法。

【问题讨论】:

    标签: flutter stream


    【解决方案1】:

    你可以使用rxdartpairwise:

    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 他们并在一个流中获取所有内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-15
      • 2020-04-30
      • 2021-01-06
      • 2021-07-10
      • 2021-04-01
      • 2020-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多