RxJava combineLatest - 从变化中观察
RxJava combineLatest - observable from changes
我创建了包含 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();
}
});
您可以使用构造函数创建 UserModel 对象(将所有参数传递给它)
在构造函数中将每个参数映射到您想要的字段。现在你有了另一个 UserModel。
您可以通过覆盖 UserModel 的 equal 来比较它们,或者您可以使用 Gson 转换它们并比较 String!我更喜欢第一个解决方案。
更新
对于编辑后添加的空行,您可以这样检查:
for(int i = 0; i < 15; i++){
if(!args[i].toString().isEmpty()) {
return false;
}
}
return true;
我创建了包含 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();
}
});
您可以使用构造函数创建 UserModel 对象(将所有参数传递给它) 在构造函数中将每个参数映射到您想要的字段。现在你有了另一个 UserModel。 您可以通过覆盖 UserModel 的 equal 来比较它们,或者您可以使用 Gson 转换它们并比较 String!我更喜欢第一个解决方案。
更新 对于编辑后添加的空行,您可以这样检查:
for(int i = 0; i < 15; i++){
if(!args[i].toString().isEmpty()) {
return false;
}
}
return true;