5.布爾操作符Boolean Operators
Operators that evaluate one or more Observables or items emitted by Observables
● All
● AmbWith
● any
● Contains
● DefaultIfEmpty
● sequenceEqual
● All
判斷所有數(shù)據(jù)是否滿足一定條件
Observable.fromArray(new String[]{"aaa","abb","ac","ad"})
.any(new Predicate<String>() {
@Override
public boolean test(String s) throws Exception {
return s.contains("a");
}
}).subscribe(new Consumer<Boolean>() {
@Override
public void accept(Boolean aBoolean) throws Exception {
print("any accept:"+aBoolean);//true
}
});
● Amb
獲取兩個(gè)事件流最先發(fā)數(shù)據(jù)的一個(gè)念赶,Amb操作符有方法ambArray(),ambWith(),
Observable.ambArray(
Observable.intervalRange(100,10,300,0, TimeUnit.MILLISECONDS),
Observable.intervalRange(0,10,0,0, TimeUnit.MILLISECONDS)).subscribe(
new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
print("1 amb accpet :"+aLong);//0,1,2,3,4,5,6,7,8,9
}
}
);
Observable.intervalRange(100,10,0,0, TimeUnit.MILLISECONDS)
.ambWith(Observable.intervalRange(0,10,1000,0, TimeUnit.MILLISECONDS))
.subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
print( "2 amb accpet :"+aLong);//100,101,102,103,104,105,106,107,108,109
}
});
● any
● Contains
判斷所有數(shù)據(jù)的其中一個(gè)是否滿足一定條件
Observable.fromArray(new String[]{"aaa","abb","ac","ad"})
.any(new Predicate<String>() {
@Override
public boolean test(String s) throws Exception {
return s.contains("e");
}
}).subscribe(new Consumer<Boolean>() {
@Override
public void accept(Boolean aBoolean) throws Exception {
print("any accept:"+aBoolean);//false
}
});
Observable.fromArray(new String[]{"aaa","abb","ac","ad"})
.contains("aaa").subscribe(new Consumer<Boolean>() {
@Override
public void accept(Boolean aBoolean) throws Exception {
print("contains accept:"+aBoolean);//true
}
});
● DefaultIfEmpty
如果事件源沒(méi)有數(shù)據(jù)最后础钠,會(huì)發(fā)送默認(rèn)的數(shù)據(jù)。
Observable.fromArray(new String[]{})
.defaultIfEmpty("--").subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
print("defaultIfEmpty accept:"+s);//aaa,abb,ac,ad
}
});
● sequenceEqual
判斷兩個(gè)觀察源事件流是否一致
Observable.sequenceEqual( Observable.intervalRange(100,10,0,0, TimeUnit.MILLISECONDS),
Observable.intervalRange(100,10,0,0, TimeUnit.MILLISECONDS)).subscribe(new Consumer<Boolean>() {
@Override
public void accept(Boolean aBoolean) throws Exception {
print("sequenceEqual accept:"+aBoolean);//true
}
});