Как объяснено в комментариях compose
сразу выполнит лямбду, и, следовательно, оператор print выполняется в главном потоке.
Однако аргумент compose
на самом деле является наблюдаемым, который будет излучать content
, а не сам контент. Таким образом, вы действительно хотите оперировать этим, как обычная наблюдаемая. Вот, например, функция карты, которая не будет работать в главном потоке:
mEndpoint.fetchContent()
.map(content -> {
Log.i("thread-name", "map" + Thread.currentThread());
return content;
})
.compose(content -> content.map(it -> {
Log.i("thread-name", "map" + Thread.currentThread());
return it;
}))
Обратите внимание, что я сохранил имя переменной content
таким же, чтобы вы могли легко увидеть различия, но это на самом деле должно быть примерно так:
.compose(obs -> obs.map(content -> {
Log.i("thread-name", "map" + Thread.currentThread());
return content;
}))
И последнее, я обычно использую compose, когда у меня есть несколько операций, которые я могу применить к наблюдаемой и использовать их в других цепочках. Для простых сопоставлений я обычно придерживаюсь map
и друзей.