RxJava - Combinando várias / diferentes chamadas de serviço da web
Estou trabalhando com a API do Basecamp para retornar e exibir as listas de tarefas. Aqui está uma amostra do que estou fazendo no momento:
bcxClient
.fetchToDoLists()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<List<BcxToDoList>>() {
@Override
public void call(List<BcxToDoList> bcxToDoLists) {
for( final BcxToDoList toDoList : bcxToDoLists ) {
bcxClient
.fetchToDos( toDoList.bucket.id )
.subscribeOn( Schedulers.io() )
.observeOn( AndroidSchedulers.mainThread() )
.subscribe( new Action1<List<BcxToDo>>() {
@Override
public void call(List<BcxToDo> bcxToDos) {
for( BcxToDo toDo : bcxToDos ) {
toDoList.toDos.add( toDo );
}
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
throwable.printStackTrace();
}
});
}
mLoremTextView.setText(bcxToDoLists.get(0).name);
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
throwable.printStackTrace();
}
});
fetchToDoLists
efetchToDos
são chamadas de serviço da Web Retrofit que retornamBcxToDoList
eBcxToDos
Observáveis.
Na assinatura defetchToDoLists
Eu percorro cada BcxToDoList, chamofetchToDos
e anexe meus objetos BcxToDo à lista original.
Como você pode ver, é um pouco detalhado. Eu poderia apenas separar isso em duas declarações para torná-lo um pouco mais legível. Mas, isso não é muito Rx. Existe uma maneira diferente de fazer isso no RxJava e melhorar sua legibilidade?
Eu poderia usar lambdas para compactar isso, mas, neste estágio, estou mais interessado em quais recursos do RxJava eu poderia aproveitar.