Проблема здесь на плоской карте, должна быть изменена как:
Observable.from(new Integer[]{4, 5, 6, 6, 7, 3})
.doOnNext(debug("Init"))
.flatMap(i -> Observable.defer(() -> toRandomList(i))
.doOnNext(debug("defer"))
.flatMap(this::chooseString)
.subscribeOn(Schedulers.io())
)
Таким образом, весь подпоток, определенный внутри flatMap
, в котором он называется subscribeOn
, выполняется в потоке выбранного Scheduler
.
Тогда, как @Dmitry указал в своем ответе, лучше использовать fromCallable
вместо комбинации defer
и just
/ empty