Operatörler
Rxjava yı geleneksel java koduna göre bir adım öne geçiren olayın , yayınlanan datayı işlemek için çok geniş metod seti olduğundan ilk yazdımda bahsetmiştim . Bu yazımda bunlardan birkaçını açıklamaya çalışacağım .
Bir observable ın sonucunda oluşan değer tekrar başka bir observable a bağlanıyorsa . Yani asenkron bir işlem sonucu aslında başka bir asenkron işlem sonucuna bağlıysa içiçe iki tane observable yazmaktansa flatmap kullanılır .
Single.fromCallable(new Callable() {
@Override
public Integer call() throws Exception {
return 1;
//return 2;
}
}).flatMap(new Function>() {
@Override
public SingleSource apply(Integer integer) throws Exception {
if (integer == 1)
return Single.just("fisrt");
else
return Single.just("second");
}
}).subscribe(new Consumer() {
@Override
public void accept(String s) throws Exception {
Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();
}
});
Ekran Çıktısı : "first"
Örnekte ilk olarak Integer dönen bir observable oluşturulmuştur . Başka bir observable bunu dinlemektedir ve dönen sonuca göre String bir değer dönmektedir .reduce()
Bir Observable birden çok değer üretiyor ve sonuc olarak bu değerlerin toplamı lazımsa reduce kullanılabilir .
Observable.create(new ObservableOnSubscribe>() {
@Override
public void subscribe(ObservableEmitter> e) throws Exception {
ArrayList strings = new ArrayList<>();
strings.add("Hello");
strings.add("Bro");
e.onNext(strings);
strings = new ArrayList<>();
strings.add("Whats");
strings.add("Up");
e.onNext(strings);
e.onComplete();
}
}).reduce(new BiFunction, List, List>() {
@Override
public List apply(List strings, List strings2) throws Exception {
strings.addAll(strings2);
return strings;
}
}).subscribe(new Consumer>() {
@Override
public void accept(List strings) throws Exception {
Toast.makeText(MainActivity.this, strings.toString(), Toast.LENGTH_SHORT).show();
}
});
Ekran Çıktısı : [Hello,Bro,Whatsup,Kro]
onNext ile yayınlanan her "strings" listesi reduce methoduna girer ve orada parent strings e eklenir . Subsribe ise onComplete den sonra çalışır ve sonuç olarak iki onNext metoduyla yayınlanmış olan listelerin artarda eklenmiş halini alır .