我是reactiveX的新手。通过在我的gradle模块文件中添加以下行,我在我的项目中包括了:
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运算符将测试由可实现对象生成的所有元素,而我只想知道是否找到了匹配的元素。当找到匹配时,迭代所有元素是无用的。我看到了操作员first应该做我需要做的事情
只发出可观察到的第一项(或满足某种条件的第一项)。
试图在我的Android项目中使用它,看起来在库中没有条件版的操作符。是真的吗?有没有办法让它在中使用?如果不是的话,哪种方法才是解决问题的正确方法?
非常感谢
发布于 2017-12-12 15:57:53
谢谢@akarnokd!any操作符工作得很好。我的最后代码是
public boolean hasAnyType(TYPE[] types){
Observable<TYPE> o = Observable.fromArray(types);
return o.any(this::hasType).blockingGet();
}为了完整起见,我已经测试了以前的实现,即使akarnokd提出的实现要好得多,它的工作方式也是一样的。测试被重复,直到找到一个结果,然后返回结果,而不测试任何其他元素。
https://stackoverflow.com/questions/47770025
复制相似问题