Rxjava-如何获取当前和上一项?

问题描述 投票:0回答:1

如何设置集合运算符,以便始终获得上一个值和当前值?如果可能的话,我要避免在管道外创建状态。

- time ->
1      2      3      4
|      |      |      |
Operations
       |      |      |
       (1,2)  (2,3)  (3,4)

请注意,除了第一个和最后一个值之外,每个值都必须出现两次,因此简单的缓冲区就不会出现。

我曾考虑过将skipmergebuffer合并,但是合并似乎并不能保证排序。

val s = PublishSubject.create<Int>()
s.mergeWith(s.skip(1)).buffer(2).subscribe{i -> print(i)}
s.onNext(1)
s.onNext(2)
s.onNext(3)
s.onNext(4)


输出:[1,2] [2,3] [3,4]

val o = Observable.just(1,2,3,4)
o.mergeWith(o.skip(1)).buffer(2).subscribe{i -> print(i)}

输出:[1,2] [3,4] [2,3] [4]

(唯一的4个很好,并且可以预期)

kotlin rx-java rx-kotlin
1个回答
2
投票

看起来您仍然可以使用缓冲区:

Observable.just(1, 2, 3, 4)
    .buffer(2, 1)
    .subscribe { println(it) }

// prints
// [1, 2]
// [2, 3]
// [3, 4]
// [4]
© www.soinside.com 2019 - 2024. All rights reserved.