Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用RxJava在状态上重复操作_Java_Rx Java_Kotlin_Rx Kotlin - Fatal编程技术网

使用RxJava在状态上重复操作

使用RxJava在状态上重复操作,java,rx-java,kotlin,rx-kotlin,Java,Rx Java,Kotlin,Rx Kotlin,这是在Kotlin中,但我认为任何编写Java的人都能够理解 我想用Rx做一个秒表,但我在实际的停止和启动方面有点困难。最大的问题是,我不知道如何保持当前时间,同时随着不同操作(启动和停止)的到来而修改它。这是我现在得到的 fullTime.switchMap { startTime -> controlCommands.switchMap { command -> when (command) { ControlState.PLAY

这是在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)
        }
    }
}
其中
fullTime
controlCommands
是可观察的
命令,它们分别发出关于当前开始时间的事件进行倒计时,并说明下一步要做什么。我想将
controlCommands
链接起来,并能够保持从
startTime
开始的状态,当出现
PLAY
事件时,该状态将倒计时;当出现
pause
时暂停;当出现
STOP
时,该状态将在
startTime
重置

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


你知道我该怎么做吗?

如果我理解正确,你的
扫描就正确了。你只需要

  • a
    .takeUntil(state->state.hasscompleted)
    在需要停止时停止(现在可能是a
    takeWhile
    ,视情况而定)
  • 然后使用
    .map(state->state.getValute())
    获取值

这有意义吗?

如果我理解正确,您的
扫描就正确了。你只需要

  • a
    .takeUntil(state->state.hasscompleted)
    在需要停止时停止(现在可能是a
    takeWhile
    ,视情况而定)
  • 然后使用
    .map(state->state.getValute())
    获取值

这有意义吗?

这会导致订阅完成,还是会在新命令/时间到来时继续?
。takeUntil
会导致订阅终止-当条件满足时,它会从父级取消订阅。所以这不是我真正想要的,因为我想继续观察
全职
控制命令
.Hmmm-好的,你能制作一个大理石图来显示你的用例吗?我想我不理解你的要求。我希望
全职
控制命令
总是发出东西,因为它们来自用户界面。实际上,我要问的是,如何利用下游的知识暂停
间隔
(扫描
)。当扫描结果为零时,我想停止在
间隔上滴答作响,只使用零。我现在的尝试是只使用
distinctunitrichanged
,我认为这对本例有效。这会导致订阅完成吗,或者,如果新命令/时间到来,它会继续吗?
。takeUntil
将导致订阅终止-当条件满足时,它将从父级取消订阅。因此,这并不是我真正想要的,因为我想继续观察
全职
控制命令,你能制作一个大理石图来展示你的用例吗?我想我不理解你的要求。我希望
全职
控制命令
总是发出东西,因为它们来自用户界面。实际上,我要问的是,如何利用下游的知识暂停
间隔
(扫描
)。当扫描结果为零时,我想停止在
间隔上滴答作响,只使用零。我现在的尝试是只使用
distinctunitrichanged
,我认为这对本例有效。