获取由RxJava2中observable发出的N个最后一个对象
问题描述:
我有一个Observable,它发出一些数字,我只想取最后的N个元素。获取由RxJava2中observable发出的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]
?
答
在RxJava,很多运营商有相同的操作的通用语言表达式匹配的名称:取+最后N - >takeLast(int n)
:
Observable.range(1, 10)
.takeLast(3)
.toList() // <-- in case you want it as a list
.subscribe(System.out::println);