【问题标题】:Get N last objects emitted by observable in RxJava2获取 RxJava2 中 observable 发出的最后 N 个对象
【发布时间】:2017-05-06 14:22:47
【问题描述】:

我有一个 Observables,它发出一些数字,我只想获取最后 N 个元素。

我有以下代码(我使用的是 RxKotlin,它只是 RxJava 的一个包装器):

val list = listOf(1,2,3,4,5,6,7,8,9,10)
Observable.fromIterable(list)
          .buffer(3, 1)
          .lastOrError()
          .subscribe{value -> println(value)}

不幸的是,结果是[10],当我仔细查看缓冲区运算符返回的内容时,我看到了这个:

[1, 2, 3]
[2, 3, 4]
[3, 4, 5]
[4, 5, 6]
[5, 6, 7]
[6, 7, 8]
[7, 8, 9]
[8, 9, 10]
[9, 10]
[10] 

有没有办法获得最后一个“完整”缓冲区 -> [8, 9, 10]

【问题讨论】:

    标签: java kotlin reactive-programming rx-java2 rx-kotlin


    【解决方案1】:

    在 RxJava 中,许多运算符的名称与同一运算的通用语言表达式匹配:take + last N -> takeLast(int n):

    Observable.range(1, 10)
       .takeLast(3)
       .toList() // <--  in case you want it as a list
       .subscribe(System.out::println);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-25
      • 2023-02-25
      • 1970-01-01
      • 2020-01-30
      • 1970-01-01
      • 2017-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多