2016-03-17 27 views
7

kırmadan gözlemlenebilir için Operatörleri nasıl uygulanır. Ben "zincirini kesmeden" bir boolean değerine bağlı olarak iki operatör birini uygulayabilecektir istiyorum.RxJava: şartlı gözlenebilir bir RxJava I operatörlerin zinciri var zincirini

ben Rx (Java) nispeten yeni ve büyük olasılıkla geçici değişken tanıştırmak benim şimdiki yaklaşımından daha bunu yapmanın daha deyimsel ve okunabilir yolu var gibi hissediyorum.

Burada aksi toList() ile sınırsız boyutta tek parti yayan bir parti boyutu saha boş olmayan ise bir gözlemlenebilir öğeleri tamponlama somut örnek:

Observable<Item> source = Observable.from(newItems); 
Observable<List<Item>> batchedSource = batchSize == null ? 
       source.toList() : 
       source.buffer(batchSize); 
return batchedSource.flatMap(...).map(...) 

bu mümkün gibi bir şey var mı? (Java çünkü sözde lambda'lar):

Observable.from(newItems) 
    .applyIf(batchSize == null, 
      { o.toList() }, 
      { o.buffer(batchSize) }) 
    .flatMap(...).map(...) 

cevap

8

You-dizisine kalmak compose(Func1) kullanabilirsiniz ama yapacak özel davranış

source 
.compose(o -> condition ? o.map(v -> v + 1) : o.map(v -> v * v)) 
.filter(...) 
.subscribe(...) 
+2

Mükemmel! Çok teşekkürler. 'compose()' şu anda resmi operatör belgelerinde görünmüyor, ancak hızlı bir arama, kelimenin tam anlamıyla "Zinciri kırma" olarak adlandırılan güzel bir blog yayınını ortaya koydu: http://blog.danlew.net/2015/03/ 02/dont-break-zincir/ – user1405990

+0

koşul öğesinin kendi iç ne olur? örnek: {! it.bitmap = null {indir & set} else {sadece set}} wallpapers.map – feresr

+1

kullanın 'flatMap' veya' concatMap'. – akarnokd