Temel Rxjava (3)

Gürkan Kesgin
KoçSistem
Published in
2 min readOct 15, 2017

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ğunu ilk yazımda anlatmıştım . Bu yazımda bunlardan birkaçını açıklamaya çalışacağım .

flatMap()

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) {
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 .

Not : Eğer birden fazla data yayınlıyorsanız ve asenkron çalışmasını istiyorsanız flatmap kullanabilirsiniz. Ama senkron çalışması gerekiyorsa -yayınlanan datalar sıra sıra işletilecekse- concatmap kullanmalısınız . Switchmap ise sadece yayınlanan son data ile ilgilenir öncekileri görmezden gelir.

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]

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 .

Yazının devamına linkten erişebilirsiniz.

--

--