2017-08-08 8 views
0

私は配列リストのリストを持っています。メインリストの各リストには、一定数の項目が含まれています。 (各アレイリストに3つの項目があります) 。私がしたいことは、各リストのインデックスワイズの合計を新しいリストとして取得する必要があるということです。例えば 私の主なリストはrxjavaを使用したリストのリストのインデックス付き合計

 1, 2, 3 
     1, 2, 3 
     1, 2, 3 

ような配列のリストが含まれている場合は、私の結果のリストが

 3, 6, 9 

であるべきと私はRxJavaでこれを行う必要があります。私はRxJavaをとても新しくしているので、私は使用すべき演算子と混同しています。私は多くの方法を試みたが、それらは働いていないので、私は質問で投稿していない。誰かがヒントや提案を示唆することができれば、非常に役に立ちます。事前に感謝

は私のソースリストは

 List<ArrayList<Integer>> mainList; 

であり、私はこれは本当にRxJavaの主な目的ではありませんが、あなたは郵便番号を経由してこれを行うことができ、得られList<Integer> sumList

答えて

0

が必要になります。

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

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)必要な場合は合計カウントを使用します。

関連する問題