使用rxjava

时间:2017-08-08 10:47:29

标签: android rx-android rx-java2

我有一个数组列表列表。主列表中的每个列表都包含常量项目。 (在每个数组列表中说3个项目) 。我想要做的是我需要将每个列表的索引和作为新列表。 例如,如果我的主List包含像

这样的数组列表
       1, 2, 3
       1, 2, 3
       1, 2, 3

然后我的结果列表应该是

       3, 6, 9

我必须只使用RxJava。因为我对RxJava很新,所以我应该与我应该使用的操作员混淆。我尝试了很多方法,但由于那些方法不起作用,我没有提出问题。如果有人可以建议一个提示或建议,那将非常有帮助。提前致谢

我的来源列表是

        List<ArrayList<Integer>> mainList;

我需要结果List<Integer> sumList

2 个答案:

答案 0 :(得分:0)

这不是RxJava的主要目的,但你可以通过zip:

来实现
List<List<Integer>> lists = new ArrayList<>();
for (int i = 0; i < 3; i++) {
    lists.add(Arrays.asList(1, 2, 3));
}

Flowable<Integer> f = Flowable.zip(lists, a -> {
    int sum = 0;
    for (Object o : a) {
        sum += (Integer)o;
    }
    return sum;
})

// as individual items
f.test()
.assertResult(3, 6, 9);

// as one list
f.toList()
.test()
.assertResult(Arrays.asList(3, 6, 9));

答案 1 :(得分:0)

1)您应该在build.gradle(应用级别)中添加以下RxMath依赖项。

  compile 'io.reactivex:rxjava-math:1.0.0'

2)使用以下代码从数组或列表中添加整数值的总和。

int totalCount =  MathObservable.sumInteger(Observable.just(classesItemList)
                .flatMapIterable(new Func1<List<ClassesItem>, Iterable<? extends ClassesItem>>() {
                    @Override
                    public Iterable<? extends ClassesItem> call(List<ClassesItem> list) {
                        return list;
                    }
                })
                .map(new Func1<ClassesItem, Integer>() {
                    @Override
                    public Integer call(ClassesItem classesItem) {
                        return classesItem != null ? classesItem.getStudentsCount() : 0;
                    }
                })).toBlocking().single();

3)在任何地方使用总计数。