2016-11-11 5 views
1

Ich bin neu mit Rx Java und meine aktuellen Aufgabe ist, ich habe zwei AnfragenGefüllt Modell mit zusätzlicher Reaktion mit Rx

@GET(NEWS_LIST) 
fun getNews(): Observable<NewsResponse> 

@GET 
fun getNewsImage(@Url url: String): Observable<NewsImage> 

und ich würde will Bild-URL zu 1.em Response-Modell vom 2. eines hinzuzufügen. Die zweite hängt von der ersten ab. Wie ist es möglich, sie im Rx-Stream zusammenzuführen?

So erste Anforderung gibt mir die Liste der Nachrichten, dann brauche ich getNewsImage(url) mit URL für jedes Element rufen aus diesem Modell, analysieren url reales Bild von den zweiten Antwort, fügen Sie es zu news Objekt und endgültige Liste bekommt mit gefülltem Modell Dank für jeden Ratschlag

+1

'flatMap' wird Ihnen helfen. –

Antwort

2
getNews() 
     .flatMap { Observable.fromIterable(it.getTopicsList()) } //or Observable.from() if you use RxJava1 
     .flatMap({ getNewsImage(it) }, { topic, imageUrl -> 
      topic.imageUrl = imageUrl 
      [email protected] topic 
     }) 
     .toList() 

Zweite flatMap kombiniert Elemente aus der Quelle beobachtbare mit den beobachtbaren von diesen Quellelemente ausgelöst und gibt diese Kombinationen. More info

+1

Danke, 2. flatMap macht mich verrückt, ich hoffe, ich werde mich an die funktionale Programmierung gewöhnen – Gorets

2

wenn ich richtig angekommen bin: 1. Antwort ist List<> oder etwas Collection. So können Sie folgendes tun:

getNews().from() 
    .flatmap(new Func1<1stResponseItem, 2dnResponseItem>() { 
     @Override 
     public 2dnResponseItem call(1stResponseItem response) { 
      return getNewsImage(response.getImageUrl()); 
     } 
    }) 
    .tolist() 

P.S. Docs über .from(), über toList()

Verwandte Themen