x()
(link) adlı rx.Observable
numaralı örnekte, gözlemlenebilir olanı doğrudan ve akıcı bir şekilde başka bir değere çevirmek için kullanılabilecek bir örnek yöntem vardır. Bu operatörün amacı, Gözlemlenebilir'in diğer türdeki eşzamanlı/eşzamansız veri yapılarına (diğer türdeki gözlemlenebilirler gibi) geçiş yapabilen veya sadece gözlemlenebilir içeriğin içeriklerini içerilen değerlere ayırabilen bir dönüştürme işlevleri deposu oluşturmaktır. Dönüşüm işlevini bir kez yazın ve tekrar tekrar kullanmak için saklayın.
Yöntem imzası: Eşzamanlı listeye gözlemlenebilir bir potansiyel asenkron dönüştürmek için
public <R> R x(Func1<? super OnSubscribe<T>, ? extends R> conversion);
Kullanımı:
List<Integer> list = Observable.range(1, 10).x(new Func1<OnSubscribe<Integer>, List<Integer>>() {
@Override
public List<Integer> call(OnSubscribe<Integer> onSubscribe) {
List<Integer> allElements = new ArrayList<Integer>();
CountDownLatch latch = new CountDownLatch(1);
AtomicReference<Throwable> failure = new AtomicReference<Throwable>();
onSubscribe.call(new Subscriber<Integer>(){
@Override
public void onCompleted() {
latch.countDown();
}
@Override
public void onError(Throwable e) {
failure.set(e);
}
@Override
public void onNext(Integer t) {
allElements.add(t);
}});
while (true) {
try {
latch.await();
break;
} catch (InterruptedException e1) {
// continue waiting
}
}
Throwable e = failure.get();
if (e != null)
throw new RuntimeException(e);
return allElements;
}});
System.out.println(list);
çıkış
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
bu operatör @Experimental
anda olduğuna dikkat edin ve yeniden adlandırılması ("genişletmek") çok olasıdır, ancak e RxJava'daki xperimental işlevselliği changed in any release olabilir.
evet katılıyorum, ama benim durumumda, ben katılmıyorum: p İlk android olduğum için, bu yüzden java8 yok. Başka bir neden, bu dönüşümleri zaten normal-java tarzında yapmak zorundayım, bu yüzden benim için rxOperators daha temiz. Benim amacımı görüyor musun? –
@ user3806331 Android için başka bir seçenek de Solid'tir https://github.com/konmik/solid – LordRaydenMK
Android (henüz) Stream'e sahip değil ve Guava bir * masif * referans sayısı içeriyor (Android'in 65k dex sınırı için kötü) . RxJava Android uygulamalarında popüler ve Stream vb yerine kullanarak oldukça makul hissediyorum. – Tom