使用RxJava重复对状态的操作

时间:2017-05-31 01:10:16

标签: java rx-java kotlin rx-kotlin

这是在Kotlin,但我认为任何编写Java的人都能理解。

我试图用Rx制作一个秒表,我在实际停止和启动时遇到了一些麻烦。最大的问题是我不知道如何保持当前时间,同时修改它,因为不同的动作(开始和停止)进来。这就是我现在所拥有的。

fullTime.switchMap { startTime ->
    controlCommands.switchMap { command ->
        when (command) {
            ControlState.PLAY -> Observable.interval(1L, TimeUnit.SECONDS).map {
                ControlState.PLAY
            }
            ControlState.PAUSE -> Observable.just(ControlState.PAUSE)
            else -> Observable.just(ControlState.STOP)
        }
    }
}

其中fullTimecontrolCommandsObservable,它们分别发出有关当前开始时间倒计时和下一步说明操作的事件。我希望链接controlCommands,并且能够保持状态从startTime开始,当PLAY事件出现时倒计时,PAUSE出现时暂停,然后重置出现startTimeSTOP

scan几乎可以正常工作,但我不知道如何在计时器达到0后停止并且每秒仍然会发送PLAY,因为它会发送重复信息。它也不允许在状态和观察值之间进行分离。因此,scan累积的值必须与Observable内的值相同(如果有意义的话)。

我应该做些什么?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,那么您与scan走在正确的轨道上。你只需要

  • 一个.takeUntil(state -> state.hasCompleted)在您需要停止时停止(可能是takeWhile,这取决于)。
  • 然后.map(state -> state.getValute())获取值

这有意义吗?