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

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

我编写了自定义可观察对象,当用户故意移动 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/

相关文章:

java - 节点 : org. hibernate.hql.internal.ast.tree.MethodNode 没有数据类型

java - for 每个循环中的空指针异常

java - 链接几个复选框以获得某些结果

google-maps - 对齐谷歌地图标记图像以防止重叠

javascript - 为什么谷歌地图当前位置与桌面浏览器和笔记本电脑浏览器不同

java - Gradle 4.8.1 - 无法从 '9.0.1' 错误确定 Java 版本

java - 字段格式的 Jackson 回滚解析不正确

java - Android - ArrayList 和 RecyclerView.Adapter

java - Android字节数组批处理

javascript - Google Maps JS v3 Mysql While 循环