#Menerapkan Operator Anda Sendiri
Anda bisa menerapkan operator Observable anda sendiri. Halaman ini akan mengajarkan anda bagaimana caranya.
Jika operator anda didesain untuk lebih ke arah inisiasi sebuah Observable daripada untuk merubah atau bereaksi terhadap Observable sumber, anda dianjurkan untuk memakai method create( )
daripada mencoba untuk menerapkan Observable
secara manual. Jika tidak, ikuti petunjuk dibawah ini.
Contoh berikut ini menunjukkan kepada anda bagaimana caranya untuk menambatkan sebuah operator kustom (dalam kasus ini: myOperator
) dengan sebuah operator standar RxJava dengan menggunakan operator lift( )
:
Observable foo = barObservable.ofType(Integer).map({it*2}).lift(new myOperator<T>()).map({"transformed by myOperator: " + it});
Bagian dibawah ini akan menunjukkan kepada anda bagaimana caranya untuk membentuk kerangka operator anda agar bisa bekerja dengan baik dengan lift( )
.
Definisikan operator anda sebagai suatu public class yang mengimplementasi interface Operator
, seperti berikut:
public class myOperator<T> implements Operator<T> {
public myOperator( /* any necessary params here */ ) {
/* any necessary initialization here */
}
@Override
public Subscriber<? super T> call(final Subscriber<? super T> s) {
return new Subscriber<t>(s) {
@Override
public void onCompleted() {
/* add your own onCompleted behavior here, or just pass the completed notification through: */
if(!s.isUnsubscribed()) {
s.onCompleted();
}
}
@Override
public void onError(Throwable t) {
/* add your own onError behavior here, or just pass the error notification through: */
if(!s.isUnsubscribed()) {
s.onError(t);
}
}
@Override
public void onNext(T item) {
/* this example performs some sort of simple transformation on each incoming item and then passes it along */
if(!s.isUnsubscribed()) {
transformedItem = myOperatorTransformOperation(item);
s.onNext(transformedItem);
}
}
};
}
}
isUnsubscribed( )
dari subsriber-subscribernya sebelum memancarkan item apapun kepada (atau mengirim notifikasi apapun) ke subscriber tersebut. Jangan membuat waktu untuk membuat item yang tidak diperhatikan oleh subscriber manapun.onNext( )
dari sebuah subscriber tidak peduli berapa kali pun, namun pemanggilan tersebut tidak boleh saling tumpang tindih.onCompleted( )
atau onError( )
dari sebuah subscriber, tetapi tidak keduanya, hanya sekali, dan tidak memanggil fungsi onNext( )
dari subscriber tersebut setelahnya.serialize( )
kepadanya untuk memaksa agar mematuhi aturan dengan benar.first( )
didefinisikan sebagai take(1)
.
single( )
ignoreElements( )
didefinisikan sebagai filter(alwaysFalse( ))
reduce(a)
didefinisikan sebagai scan(a)
.
last( )
onError( )
.