Используйте оператор toList ().
![toList working](https://i.stack.imgur.com/aQV7c.png)
Для данного Наблюдаемого, он будет собирать входящие выбросы в Список, а затем выдвигать весь этот Список как один выброс (через 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 { ... }