延迟特定值
Delay specific values
我有一个运动传感器,它为我提供了 Subject
和 boolean
值。 true
,当检测到移动时,false
当传感器在固定的、不可更改的时间范围后未检测到任何东西时。
我想在运动时开灯,但灯应该在给定的时间内保持亮着。 false
应该延迟。
如果发出了 true
值,而延迟是“延迟”,则不应发生任何事情(也就是灯应保持亮着)。
考虑这个table
time t
emitted value
action
1
true
turn lights on
2
false
do nothing
3
none emitted
turn lights off
4
true
turn lights on
5
false
do nothing
6
true
do nothing
这是一些伪代码:
motionSensor.isMoving$()
// delayWhen-method does not exsit
.delayWhen(Duration.of(5, MINUTES), isMoving -> !isMoving)
.distinctUntilChanged()
.subscribe(isMoving -> {
if (isMoving) {
turnLightsOn();
} else {
turnLightsOff();
});
我需要这个Github Project
没找到运算符,所以写成手动风格
Subject<Boolean> isMoving$ = getSubject();
isMoving$
.switchMap(value -> isMoving
? Observable.just(isMoving)
: Observable.just(isMoving).delay(5, TimeUnit.MINUTES))
.distinctUntilChanged()
.subscribe(isMoving -> isMoving ? turnLightsOn() : turnLightsOff());
特别说明:IntelliJ 被这段代码搞糊涂了。如果它警告你,你可以忽略它。
我有一个运动传感器,它为我提供了 Subject
和 boolean
值。 true
,当检测到移动时,false
当传感器在固定的、不可更改的时间范围后未检测到任何东西时。
我想在运动时开灯,但灯应该在给定的时间内保持亮着。 false
应该延迟。
如果发出了 true
值,而延迟是“延迟”,则不应发生任何事情(也就是灯应保持亮着)。
考虑这个table
time t | emitted value | action |
---|---|---|
1 | true | turn lights on |
2 | false | do nothing |
3 | none emitted | turn lights off |
4 | true | turn lights on |
5 | false | do nothing |
6 | true | do nothing |
这是一些伪代码:
motionSensor.isMoving$()
// delayWhen-method does not exsit
.delayWhen(Duration.of(5, MINUTES), isMoving -> !isMoving)
.distinctUntilChanged()
.subscribe(isMoving -> {
if (isMoving) {
turnLightsOn();
} else {
turnLightsOff();
});
我需要这个Github Project
没找到运算符,所以写成手动风格
Subject<Boolean> isMoving$ = getSubject();
isMoving$
.switchMap(value -> isMoving
? Observable.just(isMoving)
: Observable.just(isMoving).delay(5, TimeUnit.MINUTES))
.distinctUntilChanged()
.subscribe(isMoving -> isMoving ? turnLightsOn() : turnLightsOff());
特别说明:IntelliJ 被这段代码搞糊涂了。如果它警告你,你可以忽略它。