RX操作符之过滤操作一(debounce、filter、ofType、takeLast、last、lastOrDefault、takeLastBuffer、skip、skipLast、take)
2016-08-03 18:50
513 查看
一、debounce
仅在过了一段指定的时间还没发射数据时才发射一个数据,
注:这个操作符会会接着最后一项数据发射原始Observable的
运行结果:
二、filter
只发射符合条件的数据,
运行结果:
三、ofType
ofType只返回指定类型的数据
四、takeLast
发射Observable发射的最后N项数据,
运行结果:
五、last
只发射最后一项(或者满足某个条件的最后一项数据)
注:
运行结果:
六、lastOrDefault
运行结果:
七、takeLastBuffer
运行结果:
八、skip
跳过之前的n项,从n+1项开始发射数据
Integer[]items = {1,2,3,4,5,6,7,8};
Observable myObservable = Observable.from(items)
.skip(4);
Subscriber<Integer> mySubscriber =new Subscriber<Integer>() {
@Override
public void onNext(Integer integer) {
System.out.println("onNext................."+integer);
}
@Override
public void onCompleted() {
System.out.println("onCompleted.................");
}
@Override
public void onError(Throwable e) {
System.out.println("onError....................");
}
};
myObservable.subscribe(mySubscriber);
运行结果:
九、skipLast
Integer[]items = {1,2,3,4,5,6,7,8};
Observable myObservable = Observable.from(items)
.skipLast(4);
Subscriber<Integer> mySubscriber =new Subscriber<Integer>() {
@Override
public void onNext(Integer integer) {
System.out.println("onNext................."+integer);
}
@Override
public void onCompleted() {
System.out.println("onCompleted.................");
}
@Override
public void onError(Throwable e) {
System.out.println("onError....................");
}
};
myObservable.subscribe(mySubscriber);
运行结果:
十、take
运行结果:
仅在过了一段指定的时间还没发射数据时才发射一个数据,
Debounce操作符会过滤掉发射速率过快的数据项。
注:这个操作符会会接着最后一项数据发射原始Observable的
onCompleted通知,即使这个通知发生在你指定的时间窗口内(从最后一项数据的发射算起)。也就是说,
onCompleted通知不会触发限流。
Integer[]items = {1,2,3,4,5,6,7,8}; Observable myObservable = Observable.from(items) .debounce(2,TimeUnit.SECONDS); Subscriber<Integer> mySubscriber =new Subscriber<Integer>() { @Override public void onNext(Integer integer) { System.out.println("onNext................."+integer); } @Override public void onCompleted() { System.out.println("onCompleted................."); } @Override public void onError(Throwable e) { System.out.println("onError...................."); } }; myObservable.subscribe(mySubscriber);
运行结果:
二、filter
只发射符合条件的数据,
Filter操作符使用你指定的一个谓词函数测试数据项,只有通过测试的数据才会被发射。
Integer[]items = {1,2,3,4,5,6,7,8}; Observable myObservable = Observable.from(items) .filter(new Func1<Integer, Boolean>() { @Override public Boolean call(Integer integer) { return integer < 7; } }); Subscriber<Integer> mySubscriber =new Subscriber<Integer>() { @Override public void onNext(Integer integer) { System.out.println("onNext................."+integer); } @Override public void onCompleted() { System.out.println("onCompleted................."); } @Override public void onError(Throwable e) { System.out.println("onError...................."); } }; myObservable.subscribe(mySubscriber);
运行结果:
三、ofType
ofType只返回指定类型的数据
Object [] items = {"dd",1,"ff",33,"fr",6,8,"zga",5}; Observable myObservable = Observable.from(items) .ofType(Integer.class); Subscriber<Integer> mySubscriber =new Subscriber<Integer>() { @Override public void onNext(Integer integer) { System.out.println("onNext................."+integer); } @Override public void onCompleted() { System.out.println("onCompleted................."); } @Override public void onError(Throwable e) { System.out.println("onError...................."); } }; myObservable.subscribe(mySubscriber);运行结果:
四、takeLast
发射Observable发射的最后N项数据,
TakeLast操作符修改原始Observable,你可以只发射Observable'发射的后N项数据,忽略前面的数据。
Integer[]items = {1,2,3,4,5,6,7,8}; Observable myObservable = Observable.from(items) .takeLast(5); Subscriber<Integer> mySubscriber =new Subscriber<Integer>() { @Override public void onNext(Integer integer) { System.out.println("onNext................."+integer); } @Override public void onCompleted() { System.out.println("onCompleted................."); } @Override public void onError(Throwable e) { System.out.println("onError...................."); } }; myObservable.subscribe(mySubscriber);
运行结果:
五、last
只发射最后一项(或者满足某个条件的最后一项数据)
注:
Last没有实现为一个返回Observable的过滤操作符,而是实现为一个在当时就发射原始Observable指定数据项的阻塞函数。在这些实现中,如果你想要的是一个过滤操作符,最好使用
TakeLast(1)。
Integer[]items = {1,2,3,4,5,6,7,8}; Observable myObservable = Observable.from(items) .last(); Subscriber<Integer> mySubscriber =new Subscriber<Integer>() { @Override public void onNext(Integer integer) { System.out.println("onNext................."+integer); } @Override public void onCompleted() { System.out.println("onCompleted................."); } @Override public void onError(Throwable e) { System.out.println("onError...................."); } }; myObservable.subscribe(mySubscriber);
运行结果:
六、lastOrDefault
lastOrDefault与
last类似,不同的是,如果原始Observable没有发射任何值,它发射你指定的默认值。
Integer[]items = {}; Observable myObservable = Observable.from(items) .lastOrDefault(3); Subscriber<Integer> mySubscriber =new Subscriber<Integer>() { @Override public void onNext(Integer integer) { System.out.println("onNext................."+integer); } @Override public void onCompleted() { System.out.println("onCompleted................."); } @Override public void onError(Throwable e) { System.out.println("onError...................."); } }; myObservable.subscribe(mySubscriber);
运行结果:
七、takeLastBuffer
takeLastBuffer和
takeLast类似,唯一的不同是它把所有的数据项收集到一个
List再发射,而不是依次发射一个。
Integer[]items = {1,2,3,4,5,6,7,8}; Observable myObservable = Observable.from(items) .takeLastBuffer(4); Subscriber<List<Integer>> mySubscriber =new Subscriber<List<Integer>>() { @Override public void onNext(List<Integer> list) { System.out.println("onNext方法中集合的長度是................."+list.size()); for(int i=0;i<list.size();i++){ System.out.println("onNext循環................."+list.get(i)); } } @Override public void onCompleted() { System.out.println("onCompleted................."); } @Override public void onError(Throwable e) { System.out.println("onError...................."); } }; myObservable.subscribe(mySubscriber);
运行结果:
八、skip
跳过之前的n项,从n+1项开始发射数据
Integer[]items = {1,2,3,4,5,6,7,8};
Observable myObservable = Observable.from(items)
.skip(4);
Subscriber<Integer> mySubscriber =new Subscriber<Integer>() {
@Override
public void onNext(Integer integer) {
System.out.println("onNext................."+integer);
}
@Override
public void onCompleted() {
System.out.println("onCompleted.................");
}
@Override
public void onError(Throwable e) {
System.out.println("onError....................");
}
};
myObservable.subscribe(mySubscriber);
运行结果:
九、skipLast
SkipLast操作符,你可以忽略原始Observable发射的后N项数据,只保留之前的数据。注意:这个机制是这样实现的:延迟原始Observable发射的任何数据项,直到它发射了N项数据。
Integer[]items = {1,2,3,4,5,6,7,8};
Observable myObservable = Observable.from(items)
.skipLast(4);
Subscriber<Integer> mySubscriber =new Subscriber<Integer>() {
@Override
public void onNext(Integer integer) {
System.out.println("onNext................."+integer);
}
@Override
public void onCompleted() {
System.out.println("onCompleted.................");
}
@Override
public void onError(Throwable e) {
System.out.println("onError....................");
}
};
myObservable.subscribe(mySubscriber);
运行结果:
十、take
Take操作符让你可以修改Observable的行为,只返回前面的N项数据,然后发射完成通知,忽略剩余的数据。
Integer[]items = {1,2,3,4,5,6,7,8}; Observable myObservable = Observable.from(items) .take(4); Subscriber<Integer> mySubscriber =new Subscriber<Integer>() { @Override public void onNext(Integer integer) { System.out.println("onNext................."+integer); } @Override public void onCompleted() { System.out.println("onCompleted................."); } @Override public void onError(Throwable e) { System.out.println("onError...................."); } }; myObservable.subscribe(mySubscriber);
运行结果:
相关文章推荐
- 7、步步为营VS 2008 + .NET 3.5(7) - LINQ查询操作符之First、FirstOrDefault、Last、LastOrDefault、ElementAt、ElementAtOrDefault、Contains、Any、All、Count、LongCount、Sum、Min、Max、Average、Aggregate、Cast、DefaultIfEmpty、SequenceEqual、OfType、ToArray、ToList、ToDictionary
- 7.3 Filtering 过滤操作 - Debounce/Distinct/Filter/Sample/Skip/Take
- 步步为营VS 2008 + .NET 3.5(7) - LINQ查询操作符之First、FirstOrDefault、Last、LastOrDefault、ElementAt、ElementAtOrDefault、Contains、Any、All、Count、LongCount、Sum、Min、Max、Average、Aggregate、Cast、DefaultIfEmpty、SequenceEqual、OfType、ToArray、ToList、ToDictionary
- RxJava【过滤】操作符 filter distinct throttle take skip first
- Android函数响应式编程——必学的RxJava过滤操作符filter、elementAt、distinct、skip、take、ignoreElements、throttleFirst
- RX操作符之过滤操作二(firstOrDefault、single、elementAt、sample、throttleFirst、throwttleLast、throttleWithTimeout)
- 6、步步为营VS 2008 + .NET 3.5(6) - LINQ查询操作符之Distinct、Union、Concat、Intersect、Except、Skip、Take、SkipWhile、TakeWhile、Single、SingleOrDefault、Reverse、SelectMany
- 步步为营VS 2008 + .NET 3.5(7) - LINQ查询操作符之First、FirstOrDefault、Last、LastOrDefault
- LINQ查询操作符之First、FirstOrDefault、Last、LastOrDefault、ElementAt、ElementAtOrDefault、Contains、Any、All、Count 等
- RxJava 过滤操作符 skip,skipLast,task,takeLast
- LINQ查询操作符之First、FirstOrDefault、Last、LastOrDefault、ElementAt、ElementAtOrDefault、Contains、Any、All、Coun
- 王学岗RxJava(十四)—filter,take,takelast,distinct,distinctUntilChanged,first,last,skin,skinlast等数据的过滤方法
- LINQ 标准的查询操作符 过滤 where、index1、OfType
- LINQ 标准的查询操作符 过滤 where、index1、OfType
- Rx_java(6)Rx_java2操作符(debounce 、filter 、switchMap )介绍-搜索功能小案例
- RxJava 过滤操作符 ofType
- RX操作符之对Observable发射的数据执行变换操作二(scan、groupby、buffer、window)
- 步步为营VS 2008 + .NET 3.5(7) - LINQ查询操作符之First、FirstOrDefault、Last、LastOrDefault、ElementAt、ElementAtOrDefault、Contains、Any、All、Coun
- 步步为营VS 2008 + .NET 3.5(7) - LINQ查询操作符之First、FirstOrDefault、Last、LastOrDefault、ElementAt、ElementAtOrDefault、Contains、Any、All、Coun
- MongoDB入门---文档查询之$type操作符&limit方法&skip方法&简单排序(sort)操作