ReactiveX 在 rx-android 中有条件的第一个运算符
ReactiveX First operator with condition in rx-android
我是 reactiveX 的新手。我通过将这些行添加到我的 gradle 模块文件来将 rx-android 包含在我的项目中:
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'io.reactivex.rxjava2:rxjava:2.1.7'
现在我正在尝试开始使用它。作为第一次尝试,我尝试使用 reactiveX 检查两个列表是否至少包含一个公共元素。我从第一个列表创建了一个可观察对象,然后我想根据第二个列表中包含的元素列表测试每个元素。这样操作我已经成功实现了
public boolean hasAnyType(TYPE[] types){
Observable<TYPE> o = Observable.fromArray(types);
return !o.filter(type -> hasType(type)).isEmpty().blockingGet();
}
但是,如果我理解正确的话,filter
运算符会测试 obervable 生成的所有元素,而我只想知道是否找到了匹配项。找到匹配项时遍历所有元素是没有用的。
我见过运算符 first
应该完全符合我的需要
emit only the first item (or the first item that meets some condition) emitted by an Observable
尝试在我的 Android 项目中使用它,库中似乎没有条件版本的运算符。是真的吗?有没有办法把它放在 rx-android 中?如果不是,哪种才是解决问题的正确反应方法?
非常感谢
谢谢! any
运算符完美运行。我的最终代码是
public boolean hasAnyType(TYPE[] types){
Observable<TYPE> o = Observable.fromArray(types);
return o.any(this::hasType).blockingGet();
}
为了完整起见,我测试了我以前的实现,即使 akarnokd 提出的更好,它的工作方式也是一样的。重复测试直到找到结果然后返回结果而不测试任何其他元素。
我是 reactiveX 的新手。我通过将这些行添加到我的 gradle 模块文件来将 rx-android 包含在我的项目中:
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'io.reactivex.rxjava2:rxjava:2.1.7'
现在我正在尝试开始使用它。作为第一次尝试,我尝试使用 reactiveX 检查两个列表是否至少包含一个公共元素。我从第一个列表创建了一个可观察对象,然后我想根据第二个列表中包含的元素列表测试每个元素。这样操作我已经成功实现了
public boolean hasAnyType(TYPE[] types){
Observable<TYPE> o = Observable.fromArray(types);
return !o.filter(type -> hasType(type)).isEmpty().blockingGet();
}
但是,如果我理解正确的话,filter
运算符会测试 obervable 生成的所有元素,而我只想知道是否找到了匹配项。找到匹配项时遍历所有元素是没有用的。
我见过运算符 first
应该完全符合我的需要
emit only the first item (or the first item that meets some condition) emitted by an Observable
尝试在我的 Android 项目中使用它,库中似乎没有条件版本的运算符。是真的吗?有没有办法把它放在 rx-android 中?如果不是,哪种才是解决问题的正确反应方法?
非常感谢
谢谢any
运算符完美运行。我的最终代码是
public boolean hasAnyType(TYPE[] types){
Observable<TYPE> o = Observable.fromArray(types);
return o.any(this::hasType).blockingGet();
}
为了完整起见,我测试了我以前的实现,即使 akarnokd 提出的更好,它的工作方式也是一样的。重复测试直到找到结果然后返回结果而不测试任何其他元素。