我想使用rxJava过滤列表列表,并得出以下解决方案。但我在几个地方使用Observable.toBlocking()。我可以更优雅地做到这一点。
为了问题,我创建了一个列表列表,其中inner包含整数范围(1 - 10,10 - 20),外部列表包含所有这些列表。我想根据内部列表中的术语过滤列表,所以我传递一个集合searchList,如果内部列表包含searchList中的任何元素,我想保留它。
我的解决方案:
public static List<List<Integer>> longFuncReturnList(Iterable<List<Integer>> masterIterable, List<Integer> searchList) {
return Observable.from(masterIterable)
.filter(new Func1<List<Integer>, Boolean>() {
@Override
public Boolean call(List<Integer> t1) {
Observable<Boolean> result = Observable.from(new IteratorIterable<Integer>(t1.iterator()))
.exists(new Func1<Integer, Boolean>() {
@Override
public Boolean call(Integer t1) {
return searchList.contains(t1);
}
});
return result.toBlocking().first();
}
}).toList().toBlocking().single();
}
为此,我使用以下方法传递List of List:
Iterable<List<Integer>> masterIterable = new IteratorIterable<List<Integer>>(masterList.iterator());
longFuncReturnList(masterIterable);
masterList是我的List列表。
对于过滤,我使用Observable.exists(),但由于它返回另一个observable,我使用toBlocking()。first()来获取布尔结果。
我的解决方案是否以Rx方式正确? 我怎样才能让它变得更好?