我编写了自定义可观察对象,当用户故意移动 Google map 时,它会发出 LatLng
对象。我还有
BehaviorSubject<Boolean> locationTracking = BehaviorSubject.create(false);
我认为这将是属性,表明 map 是否跟随用户(“跟踪位置”)。
行为应该是,一旦用户触摸 map ,跟踪就应该关闭。如果用户愿意,将需要明确打开它。
所以我写了
// once map touched, this means turn off location tracking
cameraMove(googleMap)
.map(new Func1<LatLng, Boolean>() {
@Override
public Boolean call(LatLng latLng) {
return false;
}
}).subscribe(locationTracking);
在这里,我从 map 发出的任何位置映射到错误值。出现的语法较长,兼容性设置禁止使用 lambda 语法。
那么,我是否能够创建自己的操作,例如 mapAnyToFalse
并编写
// once map touched, this means turn off location tracking
cameraMove(googleMap)
.mapAnyToFalse()
.subscribe(locationTracking);
它应该是Observable
的成员,我无法触及。有没有其他手段或者现成的解决方案?
最佳答案
简短的回答:不,你不能创建这样的运算符。
您可以实现的最接近的语法如下:
cameraMove(googleMap)
.map( anyToFalse() )
.subscribe(locationTracking);
如果您的代码中的其他地方有一个方法:
public Func1<Object, Boolean> anyToFalse() {
return new Func1<Object, Boolean>() {
@Override
public Boolean call(LatLng latLng) {
return false;
}
}
}
(这个方法可以是静态的,然后静态导入)
关于java - 如何在 observable 上编写我自己的操作以将所有内容映射到常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41874410/