У меня есть цепочка операторов на наблюдаемой RxJava. Я хотел бы иметь возможность применить один из двух операторов в зависимости от логического значения без «разрыва цепочки».RxJava: Как условно применять операторы к наблюдаемому, не нарушая цепочку
Я относительно новичок в Rx (Java), и я чувствую, что есть, вероятно, более идиоматический и читаемый способ сделать это, чем мой нынешний подход введения временной переменной.
Вот конкретный пример, буферные элементы из наблюдаемой, если поле размер пакета не равен нулю, в противном случае, испускающие единственную партию неограниченного размера с toList()
:
Observable<Item> source = Observable.from(newItems);
Observable<List<Item>> batchedSource = batchSize == null ?
source.toList() :
source.buffer(batchSize);
return batchedSource.flatMap(...).map(...)
ли что-то подобное возможно? (Псевдо-лямбды, так как Java):
Observable.from(newItems)
.applyIf(batchSize == null,
{ o.toList() },
{ o.buffer(batchSize) })
.flatMap(...).map(...)
Отлично! Огромное спасибо. 'compose()' в настоящее время не отображается в официальных документах оператора, но быстрый поиск показал хороший пост в блоге, буквально называемый «Не сломайте цепочку»: http://blog.danlew.net/2015/03/ 02/dont-break-the-chain/ – user1405990
Что делать, если условие находится внутри самого элемента? Например: wallpapers.map {it.bitmap! = null {загрузить & set} else {just set}} – feresr
Используйте 'flatMap' или' concatMap'. – akarnokd