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

标签 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]

最佳答案

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

关于java - 获取 RxJava2 中 observable 发出的最后 N 个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43821571/

相关文章:

Java int 与整数

java - Graphics/JPanel 尺寸不是以像素为单位测量的吗?

java - 可怕的 java.lang.NoClassDefFoundError

arrays - Kotlin 中的展平数组

javascript - Kotlin - 多平台功能

java - 如何从 void 方法返回 Completable

java - 如何从 InputStream 创建基于行的可观察对象?

java - 私有(private)成员和继承

java - 使用 Axon 跨不同 JVM 的多个传奇(相同类型)

android - 在 RxJava 中的 TimeoutException 上恢复 Flowable