آموزش عملگر ها یا اپراتور های Distinct ، Reduce و Count در RxJava ، در ادامه آموزش های عملگرهای RxJava در این پست به بررسی 3 عملگر دیگر یعنی Distinct ، Reduce و Count می پردازیم.
با استفاده از اپراتور Distinct می توان از انتشار آیتم های تکراری در سری داده ها جلوگیری کرد.در مثال زیر ما یک سری داده به Observable تبدیل کردیم که در میان آنها داده تکراری نیز وجود دارد اما در نتیجه از انتشار داده های تکراری جلوگیری شده است
همچنین بخوانید: اپراتورها یا عملگرهای RxJava
Observable numbersObservable = Observable.just(10,10, 15, 20, 100, 200, 100, 300, 20, 100);
numbersObservable
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.distinct()
.subscribe(new Observer<Integer>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Integer integer) {
Log.d(TAG, "onNext: " + integer);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
خروجی
onNext: 10
onNext: 15
onNext: 20
onNext: 100
onNext: 200
onNext: 300
همچنین بخوانید: آموزش اپراتور ها یا عملگر های Min ، Max ، Sum و Average در RxJava
اپراتور Count درواقع آیتم هایی که می خواهید منتشر یا emit کنید را می شمارد و تنها تعداد آن را منتشر می کند.به مثال زیر توجه کنید:
Observable numbersObservable = Observable.just(1,2,3,4,5);
numbersObservable
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.count()
.subscribeWith(new SingleObserver<Long>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onSuccess(Long count) {
Log.d("count is :" + count);
}
@Override
public void onError(Throwable e) {
}
});
خروجی
count is : 5
وظیفه اپراتور Reduce () این است که یک سری عملیات را برروی آیتم ها اعمال کند و در نهایت نتیجه نهایی را منتشر کند.در مثال زیر ما عملیات جمع را برروی داده های متوالی ۱ تا ۱۰ اعمال میکنیم و درنهایت نتیجه عملیات را منتشر میکنیم.به مثال زیر توجه کنید:
Observable
.range(1, 10)
.reduce(new BiFunction() {
@Override
public Integer apply(Integer number, Integer sum) throws Exception {
return sum + number;
}
})
.subscribe(new MaybeObserver() {
@Override
public void onSubscribe(Disposable d) {
disposable = d;
}
@Override
public void onSuccess(Integer integer) {
Log.e(TAG, "Sum of numbers from 1 - 10 is: " + integer);
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "onError: " + e.getMessage());
}
@Override
public void onComplete() {
Log.e(TAG, "onComplete");
}
});
خروجی
Sum of numbers from 1 – 10 is: 55
امیدوارم این آموزش برای شما مفید بوده باشد…