使用RxJava展平列表

时间:2016-03-05 00:06:24

标签: java java-8 rx-java flatten rx-android

我正在尝试使用Rx转换flatten一个List。下面是当前的代码:

rxflatten(treeList).subscribe(new Action1<List<Object>>() {
            @Override
            public void call(List<Object> objects) {
                Log.d("test", "original= " + treeList + " flattened=" + objects) ;
            }
        });


public static Observable<Object> rxflattenmylist(List<?> list) {
       return Observable.from(list)
                .flatMap(item -> item instanceof List<?> ? rxflattenmylist((List<?>) item) : Observable.just(item));
    }

 public static Observable<List<Object>> rxflatten(List<?> list) {
        return rxflattenmylist(list)
                .toList();

    }

这是第一个数据集

private static List<Object> a(Object... a) {
        return Arrays.asList(a);
    }

List<Object> treeList = a(a(1), 2, a(a(3, 4), 5), a(a(a())), a(a(a(6))), 7, 8, a());

使用此数据集,将生成以下输出:

  

original = [[1],2,[[3,4],5],[[[]]],[[[6]]],7,8,[]]变平= [1,2] ,3,4,5,6,7,8]

这是第二个数据集

private Object[] mNestedArrays = new Object[] {
            new Object[] { new Integer[] { 1, 2 }, new Integer[] { 3, 4 }},
            new Integer[] { 5, 6 }
    };

 List<Object> treeList = Arrays.asList(mNestedArrays);

我试图使用上面的数据集做同样的事情,但它不会展平,而是只发出前2项(对象和整数数组)。

以下是此数据集的输出:

  

original = [Ljava.lang.Object; flattened = [[Ljava.lang.Object;,[Ljava.lang.Integer;]

那么我如何使用RxJava压扁第二个数据集?

谢谢!

0 个答案:

没有答案