filter:过滤数据
true则通过
Observable.just(1,55,99,33) .filter(new Func1<Integer, Boolean>() { @Override public Boolean call(Integer integer) { return integer > 80 ? true : false; } }) .subscribe(new Subscriber<Integer>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(Integer integer) { Log.e(TAG,"**"+ integer); } });
03-16 11:03:23.185 10622-10622/com.iwith.smart E/RxjavaActivity: **99takelast:只发射最后的N项数据
Observable.just(1,2,3,4,5,6,7) .takeLast(3) .subscribe(new Subscriber<Integer>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(Integer integer) { Log.e(TAG,"**"+ integer); } });
03-16 11:04:32.678 10622-10622/com.iwith.smart E/RxjavaActivity: **5 03-16 11:04:32.678 10622-10622/com.iwith.smart E/RxjavaActivity: **6 03-16 11:04:32.678 10622-10622/com.iwith.smart E/RxjavaActivity: **7last:只发射最后的一项数据
Observable.just(1,2,3,4,5,6,7) .last() .subscribe(new Subscriber<Integer>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(Integer integer) { Log.e(TAG,"**"+ integer); } });
03-16 11:05:03.113 10622-10622/com.iwith.smart E/RxjavaActivity: **7skip:跳过开始的N项数据
Observable.just(1,2,3,4,5,6,7) .skip(2) .subscribe(new Subscriber<Integer>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(Integer integer) { Log.e(TAG,"**"+ integer); } });
03-16 11:05:31.277 10622-10622/com.iwith.smart E/RxjavaActivity: **3 03-16 11:05:31.277 10622-10622/com.iwith.smart E/RxjavaActivity: **4 03-16 11:05:31.277 10622-10622/com.iwith.smart E/RxjavaActivity: **5 03-16 11:05:31.277 10622-10622/com.iwith.smart E/RxjavaActivity: **6 03-16 11:05:31.277 10622-10622/com.iwith.smart E/RxjavaActivity: **7skiplast:跳过最后的N项数据
Observable.just(1,2,3,4,5,6,7) .skipLast(2) .subscribe(new Subscriber<Integer>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(Integer integer) { Log.e(TAG,"**"+ integer); } });
03-16 11:06:25.707 10622-10622/com.iwith.smart E/RxjavaActivity: **1 03-16 11:06:25.707 10622-10622/com.iwith.smart E/RxjavaActivity: **2 03-16 11:06:25.707 10622-10622/com.iwith.smart E/RxjavaActivity: **3 03-16 11:06:25.707 10622-10622/com.iwith.smart E/RxjavaActivity: **4 03-16 11:06:25.707 10622-10622/com.iwith.smart E/RxjavaActivity: **5take:只发射开始的N项数据
Observable.just(1,2,3,4,5,6,7) .take(4) .subscribe(new Subscriber<Integer>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(Integer integer) { Log.e(TAG,"**"+ integer); } });
03-16 11:06:52.853 10622-10622/com.iwith.smart E/RxjavaActivity: **1 03-16 11:06:52.853 10622-10622/com.iwith.smart E/RxjavaActivity: **2 03-16 11:06:52.853 10622-10622/com.iwith.smart E/RxjavaActivity: **3 03-16 11:06:52.853 10622-10622/com.iwith.smart E/RxjavaActivity: **4first / takeFirst : 只发射第一项数据,或者满足某种条件的第一项数据
Observable.just(1,2,3,4,5,6,7) .first() .subscribe(new Subscriber<Integer>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(Integer integer) { Log.e(TAG,"**"+ integer); } });
03-16 11:07:30.653 10622-10622/com.iwith.smart E/RxjavaActivity: **1elementAt : 发射第N项数据
Observable.just(1,2,3,4,99,6,7) .elementAt(5) .subscribe(new Subscriber<Integer>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(Integer integer) { Log.e(TAG,"**"+ integer); } });
03-16 11:09:07.577 10622-10622/com.iwith.smart E/RxjavaActivity: **6sample / throttleLast : 在这3秒内,只发射其中最后的数据
Observable.interval(1,TimeUnit.SECONDS) .sample(3,TimeUnit.SECONDS) .subscribe(new Action1<Long>() { @Override public void call(Long aLong) { Log.e(TAG,"**"+aLong); } });
03-16 11:10:13.283 10622-17945/com.iwith.smart E/RxjavaActivity: **1 03-16 11:10:16.282 10622-17945/com.iwith.smart E/RxjavaActivity: **4 03-16 11:10:19.283 10622-17945/com.iwith.smart E/RxjavaActivity: **7 03-16 11:10:22.282 10622-17945/com.iwith.smart E/RxjavaActivity: **10throttleFirst :在这3秒内,只发射其中第一个数据
Observable.interval(1,TimeUnit.SECONDS) .throttleFirst(3,TimeUnit.SECONDS) .subscribe(new Action1<Long>() { @Override public void call(Long aLong) { Log.e(TAG,"**"+aLong); } });
03-16 11:11:16.621 18849-19113/com.iwith.smart E/RxjavaActivity: **0 03-16 11:11:19.621 18849-19113/com.iwith.smart E/RxjavaActivity: **3 03-16 11:11:22.621 18849-19113/com.iwith.smart E/RxjavaActivity: **6 03-16 11:11:25.620 18849-19113/com.iwith.smart E/RxjavaActivity: **9 03-16 11:11:28.620 18849-19113/com.iwith.smart E/RxjavaActivity: **12debounce :从发送第一个数据开始计时,在规定的时间内,若又有数据发送,则重新计时,然后再判断规定时间内,若又有数据,则重复;若无则发送给订阅者
Observable.create(new Observable.OnSubscribe<Integer>() { @Override public void call(Subscriber<? super Integer> subscriber) { if (subscriber.isUnsubscribed()) return; try { for (int i = 0; i < 10; i++) { subscriber.onNext(i); try { Thread.currentThread().sleep(i * 1000); } catch (InterruptedException e) { e.printStackTrace(); } } subscriber.onCompleted(); } catch (Exception e) { subscriber.onError(e); } } }).subscribeOn(Schedulers.newThread())
.debounce(5, TimeUnit.SECONDS) .subscribe(new Action1<Integer>() { @Override public void call(Integer integer) { Log.e(TAG,"------->call():" + integer); } });
03-16 11:14:23.804 21804-21977/com.iwith.smart E/RxjavaActivity: ------->call():6 03-16 11:14:29.804 21804-21977/com.iwith.smart E/RxjavaActivity: ------->call():7 03-16 11:14:36.804 21804-21977/com.iwith.smart E/RxjavaActivity: ------->call():8 03-16 11:14:44.804 21804-21977/com.iwith.smart E/RxjavaActivity: ------->call():9oftype:只发射指定类型的数据
Observable.just("first", 2, 3, "four",99).ofType(Integer.class).subscribe(new Action1<Integer>() { @Override public void call(Integer integer) { Log.e(TAG,"------->call():" + integer); } });
03-16 11:15:31.591 21804-21804/com.iwith.smart E/RxjavaActivity: ------->call():2 03-16 11:15:31.591 21804-21804/com.iwith.smart E/RxjavaActivity: ------->call():3 03-16 11:15:31.591 21804-21804/com.iwith.smart E/RxjavaActivity: ------->call():99timeout : 如果在一个指定的时间段后还没发射数据,就发射一个异常
Observable.timer(99,TimeUnit.SECONDS) .timeout(5,TimeUnit.SECONDS) .subscribe(new Subscriber<Long>() { @Override public void onCompleted() { Log.e(TAG,"onCompleted"); } @Override public void onError(Throwable e) { Log.e(TAG,"onError"); } @Override public void onNext(Long aLong) { Log.e(TAG,"onNext"); } });
03-16 11:16:02.760 21804-23914/com.iwith.smart E/RxjavaActivity: onErrordistinct : 过滤掉重复数据
Observable.just(1,1,2,6,4,99,6,6,7) .distinct() .subscribe(new Subscriber<Integer>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(Integer integer) { Log.e(TAG,"**"+ integer); } });
03-16 11:16:36.490 21804-21804/com.iwith.smart E/RxjavaActivity: **1 03-16 11:16:36.490 21804-21804/com.iwith.smart E/RxjavaActivity: **2 03-16 11:16:36.491 21804-21804/com.iwith.smart E/RxjavaActivity: **6 03-16 11:16:36.491 21804-21804/com.iwith.smart E/RxjavaActivity: **4 03-16 11:16:36.491 21804-21804/com.iwith.smart E/RxjavaActivity: **99 03-16 11:16:36.491 21804-21804/com.iwith.smart E/RxjavaActivity: **7distinctuntilchanged : 过滤掉连续重复的数据
Observable.just(1,2,2,2,6,1,3,3,3,6) .distinctUntilChanged() .subscribe(new Subscriber<Integer>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(Integer integer) { Log.e(TAG,"**"+ integer); } });
03-16 11:17:27.584 21804-21804/com.iwith.smart E/RxjavaActivity: **1 03-16 11:17:27.584 21804-21804/com.iwith.smart E/RxjavaActivity: **2 03-16 11:17:27.584 21804-21804/com.iwith.smart E/RxjavaActivity: **6 03-16 11:17:27.584 21804-21804/com.iwith.smart E/RxjavaActivity: **1 03-16 11:17:27.584 21804-21804/com.iwith.smart E/RxjavaActivity: **3 03-16 11:17:27.584 21804-21804/com.iwith.smart E/RxjavaActivity: **6