获取RxJava2中observable发出的N个最后一个对象

时间:2017-05-06 14:22:48

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

我有一个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]

1 个答案:

答案 0 :(得分:4)

在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);