Я пытаюсь реализовать rxandroid в шаблоне MVP,
Это мой случай использования:
класс A.class
List<B> b;
List<B> getB(){
return b;
}
B.class
String dataTochange;
void setDataToChange(String dataToChange){
this.dataToChange = dataToChange
}
Я хочу вернуть тот же Наблюдаемый (Список (A)) после изменения значения внутри B.
Это то, что я сделал,
REMOTEDATASOURCE.java:
Observable<List<A>> getAList(){
return FromApiService
.getAList() // returns List<A>
.flatMapIterable(List<A> -> A )
.map(A::getB)
.flatMapIterable(List<B> b -> b)
.map(b -> doSomeDownloading(b))
//After this i want to return the modified
List<A> containing list of B with dataChanged.
}
doSomeDownloading(B b){
somValue = doAsynchronousDownload(b)
b.setDataToChange(somValue);
}
doAsynchronousDownload(B b){
contains callbacks to listeners implemented by View for progress etc;
}
Структура хранилища:
PS: Правильна ли логика реализации, загрузка должна производиться в Presenter. или внутри хранилища!
Обновление
serviceApi.getAList()
.flatMapIterable(List<A> -> a)
.flatMap(A a ->
Observable.fromIterable(a.getB())
.doOnNext(b ->doSomeDownloading(b))
.toList()
.toObservable()
.map(new Function<List<B>, A>() {
@Override
public A apply(List<B> b) throws Exception
{
a.setB(b);
return a;
}
})
)
.toList()
.toObservable()
.doOnSubscribe(...)
В приведенном выше примере результат doSomeDownloading () игнорируется ..