【问题标题】:RxJava combineLatest - observable from changesRxJava combineLatest - 可以从变化中观察到
【发布时间】:2017-02-17 23:23:48
【问题描述】:

我使用 15 个输入创建表单,我想观察这些输入以检查是否有更改,我将输入结果与当前 userModel 进行比较。我怎样才能减少该代码,因为似乎有点复杂。看起来是这样的:

Observable.combineLatest(fieldsViewHolder.observableInputsChanges(), new FuncN<Boolean>() {
            @Override
            public Boolean call(Object... args) {

                if(userModel != null) {
                    return args[0].toString().equals(userModel.getFirstName()) && args[1].toString().equals(userModel.getLastName()) && args[2].toString().equals(userModel.getEmail()) &&
                            args[3].toString().equals(userModel.getMobilePhone()) && args[4].toString().equals(userModel.getCompanyPlace()) && args[5].toString().equals(userModel.getCompanyName()) &&
                            args[6].toString().equals(userModel.getCountry()) && args[7].toString().equals(userModel.getCompanyPosition()) && args[8].toString().equals(userModel.getPhone()) &&
                            args[9].toString().equals(userModel.getPostalCode()) && args[10].toString().equals(userModel.getStreet1()) && args[11].toString().equals(userModel.getStreet2()) &&
                            args[12].toString().equals(userModel.getFirstName()) && args[13].toString().equals(userModel.getWebPage()) && args[14].toString().equals(userModel.getCity());
                }
                return args[0].toString().isEmpty() && args[1].toString().isEmpty() && args[2].toString().isEmpty() &&
                    args[3].toString().isEmpty() && args[4].toString().isEmpty() && args[5].toString().isEmpty() &&
                    args[6].toString().isEmpty() && args[7].toString().isEmpty() && args[8].toString().isEmpty() &&
                    args[9].toString().isEmpty() && args[10].toString().isEmpty() && args[11].toString().isEmpty() &&
                    args[12].toString().isEmpty() && args[13].toString().isEmpty() && args[14].toString().isEmpty();
            }
        });

【问题讨论】:

    标签: android rx-java observer-pattern rx-android


    【解决方案1】:

    您可以使用构造函数创建 UserModel 对象(将所有参数传递给它) 在构造函数中将每个参数映射到您想要的字段。现在你有了另一个 UserModel。 您可以通过覆盖 UserModel 的 equal 来比较它们,或者您可以使用 Gson 转换它们并比较 String!我更喜欢第一种解决方案。

    更新 对于您在编辑后添加的空行,您可以像这样检查:

        for(int i = 0; i < 15; i++){
          if(!args[i].toString().isEmpty()) {
            return false;
          }
        }
        return true;
    

    【讨论】:

    • 听起来不错,但我想检查所有输入 args 对象是否为空。看看编辑帖子
    • @Michael 现在检查一下:D 我一开始忘了 [i] ;)
    • 或类似的东西:boolean isChange = true; for(int i = 0; i &lt; 15; i++){ isChange &amp;= !args[i].toString().isEmpty() } return isChange;
    • @Michael 起初我编写的代码与此相同,但您的代码每次都检查所有 15 个参数并为 isChange 分配新值,因此我的解决方案要快一些。
    猜你喜欢
    • 1970-01-01
    • 2017-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    相关资源
    最近更新 更多