RxJava条件操作符

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hbgaozhiwei/article/details/86541842

1、all():判断事件序列是否全部满足某个事件,如果都满足则返回true,反之返回false

方法签名:
public final Observable<T> ambWith(ObservableSource<? extends T> other)

Observable.just(1, 2, 3, 4)
.all(new Predicate < Integer > () {
    @Override
    public boolean test(Integer integer) throws Exception {
        return integer < 5;
    }
})
.subscribe(new Consumer < Boolean > () {
    @Override
    public void accept(Boolean aBoolean) throws Exception {
        Log.d(TAG, "==================aBoolean " + aBoolean);
    }
});

打印结果:

==================aBoolean true

2、takeWhile():可以设置条件,当某个数据满足条件时就会发送该数据,反之则不发送。

方法签名:
public final Observable<T> takeWhile(Predicate<? super T> predicate)

Observable.just(1, 2, 3, 4)
.takeWhile(new Predicate < Integer > () {
    @Override
    public boolean test(Integer integer) throws Exception {
        return integer < 3;
    }
})
.subscribe(new Consumer < Integer > () {
    @Override
    public void accept(Integer integer) throws Exception {
        Log.d(TAG, "========================integer " + integer);
    }
});

打印结果:

========================integer 1
========================integer 2

3、skipWhile():可以设置条件,当某个数据满足条件时,不发送该数据,反之则发送。

方法签名:
public final Observable<T> skipWhile(Predicate<? super T> predicate)

Observable.just(1, 2, 3, 4)
.skipWhile(new Predicate < Integer > () {
    @Override
    public boolean test(Integer integer) throws Exception {
        return integer < 3;
    }
})
.subscribe(new Consumer < Integer > () {
    @Override
    public void accept(Integer integer) throws Exception {
        Log.d(TAG, "========================integer " + integer);
    }
});

打印结果

========================integer 3
========================integer 4

4、takeUntil():可以设置条件,当事件满足此条件时,下一次的事件就不会被发送了。

方法签名:
public final Observable<T> takeUntil(Predicate<? super T> stopPredicate

Observable.just(1, 2, 3, 4, 5, 6)
.takeUntil(new Predicate < Integer > () {
    @Override
    public boolean test(Integer integer) throws Exception {
        return integer > 3;
    }
})
.subscribe(new Consumer < Integer > () {
    @Override
    public void accept(Integer integer) throws Exception {
        Log.d(TAG, "========================integer " + integer);
    }
});

打印结果:

========================integer 1
========================integer 2
========================integer 3
========================integer 4

5、skipUntil():当skipUntil()中的Observable发送事件了,原来的Observable才会发送事件给观察者。

方法签名:
public final <U> Observable<T> skipUntil(ObservableSource<U> other)

Observable.intervalRange(1, 5, 0, 1, TimeUnit.SECONDS)
.skipUntil(Observable.intervalRange(6, 5, 3, 1, TimeUnit.SECONDS))
.subscribe(new Observer < Long > () {
    @Override
    public void onSubscribe(Disposable d) {
        Log.d(TAG, "========================onSubscribe ");
    }

    @Override
    public void onNext(Long along) {
        Log.d(TAG, "========================onNext " + along);
    }

    @Override
    public void onError(Throwable e) {
        Log.d(TAG, "========================onError ");
    }

    @Override
    public void onComplete() {
        Log.d(TAG, "========================onComplete ");
    }
});

打印结果:

========================onSubscribe 
========================onNext 4
========================onNext 5
========================onComplete 

从结果可以看出,skipUntil()里的Observable并不会发送事件给观察者。

6、sequenceEqual():判断两个Observable发送的事件是否相同。

方法签名:
public static <T> Single<Boolean> sequenceEqual(ObservableSource<? extends T> source1, ObservableSource<? extends T> source2)
......

Observable.sequenceEqual(Observable.just(1, 2, 3),
Observable.just(1, 2, 3))
.subscribe(new Consumer < Boolean > () {
    @Override
    public void accept(Boolean aBoolean) throws Exception {
        Log.d(TAG, "========================onNext " + aBoolean);
    }
});

打印结果:

========================onNext true

7、contains():判断事件序列中是否含有某个元素,如果有则返回true,如果没有则返回false.

方法签名:public final Single<Boolean> contains(final Object element)

Observable.just(1, 2, 3)
.contains(3)
.subscribe(new Consumer < Boolean > () {
    @Override
    public void accept(Boolean aBoolean) throws Exception {
        Log.d(TAG, "========================onNext " + aBoolean);
    }
});

打印结果:

========================onNext true

8、isEmpty():判断事件序列是否为空。

方法签名:public final Single<Boolean> isEmpty()

Observable.create(new ObservableOnSubscribe < Integer > () {

    @Override
    public void subscribe(ObservableEmitter < Integer > e) throws Exception {
        e.onComplete();
    }
})
.isEmpty()
.subscribe(new Consumer < Boolean > () {
    @Override
    public void accept(Boolean aBoolean) throws Exception {
        Log.d(TAG, "========================onNext " + aBoolean);
    }
});

打印结果:

========================onNext true

9、amb():amb()要传入一个Observable集合,但是只会发送最先发送事件的Observable中的事件,其余的Observable将会被丢弃。

方法签名:
public static <T> Observable<T> amb(Iterable<? extends ObservableSource<? extends T>> sources)

ArrayList < Observable < Long >> list = new ArrayList < > ();

list.add(Observable.intervalRange(1, 5, 2, 1, TimeUnit.SECONDS));
list.add(Observable.intervalRange(6, 5, 0, 1, TimeUnit.SECONDS));

Observable.amb(list)
.subscribe(new Consumer < Long > () {
    @Override
    public void accept(Long aLong) throws Exception {
        Log.d(TAG, "========================aLong " + aLong);
    }
});

打印结果:

========================aLong 6
========================aLong 7
========================aLong 8
========================aLong 9
========================aLong 10

10、defaultIfEmpty():如果观察者只发送一个onComplete()事件,则可以利用这个方法发送一个值。

方法签名:
public final Observable<T> defaultIfEmpty(T defaultItem)

Observable.create(new ObservableOnSubscribe < Integer > () {

    @Override
    public void subscribe(ObservableEmitter < Integer > e) throws Exception {
        e.onComplete();
    }
})
.defaultIfEmpty(666)
.subscribe(new Consumer < Integer > () {
    @Override
    public void accept(Integer integer) throws Exception {
        Log.d(TAG, "========================onNext " + integer);
    }
});

打印结果:

========================onNext 666

猜你喜欢

转载自blog.csdn.net/hbgaozhiwei/article/details/86541842