根据RxJava

时间:2015-09-07 14:21:39

标签: java rx-java

我想使用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方式正确? 我怎样才能让它变得更好?

0 个答案:

没有答案