Как отфильтровать список с помощью RxJava и сгруппировать все соответствующие элементы - PullRequest
0 голосов
/ 25 августа 2018

У меня очень большой список, и я хочу выполнить простую операцию Filter над ним в фоновом потоке, а затем получить список результатов, которые соответствуют критериям фильтра, в конце операции.

Я все еще новичок в RxJava, поэтому я изо всех сил пытаюсь заставить это работать.У меня есть следующее (largeList - это ArrayList, заполненное Item):

    Observable
            .fromIterable(largeList)
            .filter { it.name.contains(query) }
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeOn(Schedulers.io())
            .subscribe { ... }

Когда я subscribe, я получаю один Item вместо полного спискаиз всех предметов, которые прошли фильтр.Как я могу создать список всех совпадающих результатов?

1 Ответ

0 голосов
/ 25 августа 2018

Используйте оператор toList (). toList working

Для данного Наблюдаемого, он будет собирать входящие выбросы в Список, а затем выдвигать весь этот Список как один выброс (через Single>).

 Observable
                .fromIterable(largeList)
                .filter { it.name.contains(query) }
                .toList() 
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
                .subscribe { ... }

Кроме того, вы можете дополнительно указать целочисленный аргумент, который будет использоваться в качестве CapacityHint, и это оптимизирует инициализацию ArrayList, чтобы ожидать примерно такое количество элементов:

  Observable
                    .fromIterable(largeList)
                    .filter { it.name.contains(query) }
                    .toList(capacityHint)
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribeOn(Schedulers.io())
                    .subscribe { ... }
...