Как собрать все целые из List <Single <List <Int>>> и поместить его в List <Int>в RxJava? - PullRequest
0 голосов
/ 30 октября 2018

Моя цель - развернуть список синглов из списка целых и получить все его элементы, чтобы поместить его в список.

List<Single<List<Int>>> listOfSinglesOfListofInts = getListSingleListType(); // random method that gives us that.
List<Int> intList = new ArrayList<>();

Моя цель - переместить все содержимое Int из listOfSinglesOfListOfInts в listInt. Вот что я попробовал:

ListOfSinglesOfListOfInt.stream().map(
    singleListOfInts -> singleListOfInts.map(
        listOfInts -> intList.addAll(listOfInts)
    )
);


return listInt;

Размер listInt всегда равен 0.

Каков будет правильный способ сделать это?

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Я сделал это в Rx-Java.

Lets consider below example to create List<Single<List<Integer>>> 

List<Integer> intList = new ArrayList<>();
Collections.addAll(intList, 10, 20, 30, 40, 50);

List<Integer> intList2 = new ArrayList<>();
Collections.addAll(intList2, 12, 22, 32, 42, 52);

List<Integer> intList3 = new ArrayList<>();
Collections.addAll(intList3, 13, 23, 33, 43, 53);

Single<List<Integer>> singleList = Single.just(intList);
Single<List<Integer>> singleList2 = Single.just(intList2);
Single<List<Integer>> singleList3 = Single.just(intList3);

List<Single<List<Integer>>> listOfSinglesOfListofInts = new ArrayList<>();

Collections.addAll(listOfSinglesOfListofInts, singleList, singleList2, singleList3);


Observable
    //Iterate through List<Singles>
    .fromIterable(listOfSinglesOfListofInts)
    //Get each single, convert to Observable and iterate to get all the integers
    .flatMap(
        singleListNew -> singleListNew
            .toObservable()
            //Iterate through each integer inside a list and return it
            .flatMapIterable(integers -> integers)
    )
    //Get all the integers from above and convert to one list
    .toList()
    //Result is List<Integer>
    .subscribe(
        result -> System.out.println("**** " + result.toString() + " ****"),
        error -> new Throwable(error)
    );

Надеюсь, это поможет.

0 голосов
/ 30 октября 2018
Операции

map не выполняются, пока не завершится цепочка Flowable. Это Flowable установлено, но не выполнено. Что вы, вероятно, хотите сделать, это пропустить Flowable через блокирующий коллектор после выравнивания формы. Попробуйте это:

return Flowable.fromIterable(listOfSingleOfListofInt)
    .flatMap(singleOfListofInt -> singleOfListofInt.toFlowable())
    .flatMap(listofInt -> Flowable.fromIterable(listofInt))
    .toList()
    .blockingGet();

Подробнее

Flowable.fromIterable(listOfSingleOfListofInt):

  • Преобразование List<Single<List<Int>>> в Flowable<Single<List<Int>>>

flatMap(singleOfListofInt -> singleOfListofInt.toFlowable()):

  • Преобразовать Flowable<Single<List<Int>>> в Flowable<List<Int>>

flatMap(listofInt -> Flowable.fromIterable(listofInt))

  • Преобразовать Flowable<List<Int>> в Flowable<Int>

toList()

  • Преобразование Flowable<Int> в Signle<List<Int>>

blockingGet()

  • Преобразование Signle<List<Int>> в List<Int>
...