如何在observable上编写我自己的操作来将所有内容映射到常量?

时间:2017-01-26 13:21:10

标签: java android google-maps rx-java reactive-programming

我编写了自定义observable,当用户单独移动Google Map时会发出LatLng个对象。我也有

BehaviorSubject<Boolean> locationTracking = BehaviorSubject.create(false);

我认为是属性,表示地图是否跟随用户(&#34;跟踪位置&#34;)或不是。

行为应该是用户触摸地图后,应该关闭跟踪。如果他愿意,用户将被要求明确打开它。

所以我写了

    // 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发出的任何位置到false值进行映射。语法显得相当长,兼容性设置禁止lambda语法。

所以,我能够创建自己的操作,例如mapAnyToFalse和写

    // once map touched, this means turn off location tracking
    cameraMove(googleMap)
        .mapAnyToFalse()
        .subscribe(locationTracking);

它应该是Observable的成员,我无法触及。还有其他方法或现成的解决方案吗?

1 个答案:

答案 0 :(得分:4)

简短回答:不,你不能创建这样的运营商。

您可以实现的最接近的语法如下:

cameraMove(googleMap)
    .map( anyToFalse() )
    .subscribe(locationTracking);

如果你的代码中有其他地方你会有一个方法:

public Func1<Object, Boolean> anyToFalse() {
    return new Func1<Object, Boolean>() {
        @Override
        public Boolean call(LatLng latLng) {
            return false;
        }
    }
}

(此方法可以是静态的,然后静态导入)