Ho una catena di operatori su un osservabile RxJava. Mi piacerebbe essere in grado di applicare uno dei due operatori in base a un valore booleano senza "spezzare la catena".RxJava: Come applicare condizionatamente operatori a un osservabile senza rompere la catena
Sono relativamente nuovo a Rx (Java) e mi sembra che ci sia probabilmente un modo più idiomatico e leggibile di farlo rispetto al mio attuale approccio di introduzione di una variabile temporanea.
Ecco un esempio concreto, il buffering articoli di un osservabile se un campo dimensione del lotto non è nullo, altrimenti emette un singolo lotto di dimensioni illimitate con il toList()
:
Observable<Item> source = Observable.from(newItems);
Observable<List<Item>> batchedSource = batchSize == null ?
source.toList() :
source.buffer(batchSize);
return batchedSource.flatMap(...).map(...)
è qualcosa di simile possibile? (Pseudo-lambda perché Java):
Observable.from(newItems)
.applyIf(batchSize == null,
{ o.toList() },
{ o.buffer(batchSize) })
.flatMap(...).map(...)
Perfetto! Grazie mille. 'compose()' non compare attualmente nei documenti ufficiali dell'operatore, ma una rapida ricerca ha emesso un bel post sul blog letteralmente chiamato "Non rompere la catena": http://blog.danlew.net/2015/03/ 02/dont-break-the-chain/ – user1405990
Cosa succede se la condizione si trova all'interno dell'elemento stesso? esempio: wallpapers.map {it.bitmap! = null {download & set} else {just set}} – feresr
Usa 'flatMap' o' concatMap'. – akarnokd