Как использовать операторы, чтобы всегда получать предыдущее и текущее значение? Если возможно, я хочу избежать создания состояния за пределами трубы.
- time ->
1 2 3 4
| | | |
Operations
| | |
(1,2) (2,3) (3,4)
Обратите внимание, что каждое значение, кроме первого и последнего, должно появляться дважды, поэтому простой буфер не подходит.
Я думал об объединении skip
с merge
и buffer
, но слияние, похоже, не гарантирует упорядочения.
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 в порядке и ожидаемо)
buffer(2, 1)
? Также вы можете использоватьscan
. Если вы немного знакомы с C #, ознакомьтесь с этим - person momt99   schedule 26.05.2020