Mam łańcuch operatorów na RxJava obserwowalne. Chciałbym móc zastosować jednego z dwóch operatorów w zależności od wartości boolowskiej bez "zerwania łańcucha".RxJava: Jak warunkowo zastosować operatorów do obserwowalnego bez zerwania łańcucha
Jestem stosunkowo nowy w Rx (Java) i wydaje mi się, że istnieje prawdopodobnie bardziej idiomatyczny i czytelny sposób na to, niż moje obecne podejście do wprowadzania zmiennej tymczasowej.
Oto konkretny przykład, buforowanie obiektów z obserwowalne jeśli pole wielkość partii jest niezerowe, inaczej emitujące pojedynczej partii nieograniczonej wielkości z toList()
:
Observable<Item> source = Observable.from(newItems);
Observable<List<Item>> batchedSource = batchSize == null ?
source.toList() :
source.buffer(batchSize);
return batchedSource.flatMap(...).map(...)
Czy coś takiego jest możliwe? (Pseudo-lambdas ponieważ Java):
Observable.from(newItems)
.applyIf(batchSize == null,
{ o.toList() },
{ o.buffer(batchSize) })
.flatMap(...).map(...)
Perfect! Dziękuję bardzo. Funkcja "compose()" nie jest obecnie wyświetlana w oficjalnych dokumentach operatora, ale szybkie wyszukiwanie zawierało miły wpis na blogu dosłownie zatytułowany "Do not break the chain": http://blog.danlew.net/2015/03/ 02/dont-break-the-chain/ – user1405990
Co się stanie, jeśli stan jest wewnątrz samego przedmiotu? przykład: wallpapers.map {it.bitmap! = null {download & set} else {just set}} – feresr
Użyj 'flatMap' lub' concatMap'. – akarnokd