java过滤类_RxJava进阶三(过滤类操作符)

bfd0b780344a

RxJava进阶

前言

上篇文章我们了解了RXJava的转换类操作符,本篇文章带着大家熟悉一下RxJava的过滤类操作符,本系列文章仅是带大家认识一下这些操作符的用法,并没有对操作符进行多种形态的使用,具体的还需要大家在使用时注意~

操作符总览

Debounce、Distinct、ElementAt、Filter、First、IgnoreElements、Last、Sample、Skip、SkipLast、Take、TakeLast...

具体使用介绍

Debounce

debounce操作符在源Observable产品一个结果时开始计时,如果在规定的间隔时间内没有别的结果产生或者在此期间调用了onCompleted,则发射数据,否则忽略发射。

代码示例:

Observable

.create((Observable.OnSubscribe) subscriber -> {

try {

//产生结果的间隔时间分别为100、200、300...900毫秒

for (int i = 1; i < 10; i++) {

subscriber.onNext(i);

Thread.sleep(i * 100);

}

subscriber.onCompleted();

} catch (Exception e) {

subscriber.onError(e);

}

})

.debounce(400, TimeUnit.MILLISECONDS)

.subscribe(new Action1() {

@Override

public void call(Integer integer) {

System.out.println(integer);

}

});

运行结果:

bfd0b780344a

debounce示例

Distinct

去重,过滤掉重复数据项~

Observable

.just(1, 1, 2, 2, 3)

.distinct()

.subscribe(new Action1() {

@Override

public void call(Integer integer) {

System.out.println(integer);

}

});

运行结果:

bfd0b780344a

distinct示例

ElementAt##

取值,取特定位置的数据项,索引是从0开始的~

代码示例:

Observable

.just(100, 101, 102, 103, 104)

.elementAt(4)

.subscribe(new Action1() {

@Override

public void call(Integer integer) {

System.out.println("onNext -->" + integer);

}

});

运行结果:

bfd0b780344a

elementAt示例

Filter##

对发射的数据进行过滤,只发射符合条件的数据~

代码示例:

Observable

.just(100, 101, 102, 103, 104)

.filter(new Func1() {

@Override

public Boolean call(Integer integer) {

return integer >= 102;

}

})

.subscribe(new Action1() {

@Override

public void call(Integer integer) {

System.out.println("onNext -->" + integer);

}

});

运行结果:

bfd0b780344a

filter示例

First##

首项,只发射首项或满足条件的首项数据~

示例代码:

Observable

.just(100, 101, 102, 103, 104)

.first(new Func1() {

@Override

public Boolean call(Integer integer) {

return integer >= 102;

}

})

.subscribe(new Action1() {

@Override

public void call(Integer integer) {

System.out.println("onNext -->" + integer);

}

});

运行结果:

bfd0b780344a

first示例

Last##

末项,只发射末项或满足条件的末项数据~

示例代码:

Observable

.just(100, 101, 102, 103, 104)

.last(new Func1() {

@Override

public Boolean call(Integer integer) {

return integer <= 102;

}

})

.subscribe(new Action1() {

@Override

public void call(Integer integer) {

System.out.println("onNext -->" + integer);

}

});

运行结果:

bfd0b780344a

last示例

IgnoreElements##

忽略所有数据,只保留终止通知(onError或onCompleted)~

示例代码:

// ignoreElements

Observable

.just(100, 101, 102, 103, 104)

.ignoreElements()

.subscribe(new Subscriber() {

@Override

public void onCompleted() {

System.out.println("onCompleted");

}

@Override

public void onError(Throwable e) {

System.out.println("onError");

}

@Override

public void onNext(Integer integer) {

System.out.println("onNext -->" + integer);

}

});

运行结果:

bfd0b780344a

ignoreElements示例

Sample##

取样,定期扫描源Observable产生的数据,发射最新的数据~

示例代码:

Observable

.interval(100, TimeUnit.MILLISECONDS)

.sample(200, TimeUnit.MILLISECONDS)

.subscribe(new Action1() {

@Override

public void call(Long aLong) {

System.out.println(aLong);

}

});

运行结果:

截取的部分输出结果,从输出结果可以看出,每次发射的数据都是偶数~

bfd0b780344a

sample示例

Skip##

跳过前面的n项数据不进行处理~

示例代码:

Observable

.just(1, 2, 3, 4, 5)

.skip(2)

.subscribe(new Action1() {

@Override

public void call(Integer integer) {

System.out.println("onNext -->" + integer);

}

});

运行结果:

bfd0b780344a

skip示例

SkipLast##

跳过后面的n项数据不进行处理~

示例代码:

Observable

.just(1, 2, 3, 4, 5)

.skipLast(2)

.subscribe(new Action1() {

@Override

public void call(Integer integer) {

System.out.println("onNext -->" + integer);

}

});

运行结果:

bfd0b780344a

skipLast示例

Take##

与skip用法相反,保留前面的n项数据进行发射,而忽略后面的结果~

示例代码:

Observable

.just(1, 2, 3, 4, 5)

.take(3)

.subscribe(new Action1() {

@Override

public void call(Integer integer) {

System.out.println("onNext -->" + integer);

}

});

运行结果:

bfd0b780344a

take示例

TakeLast##

与skipLast用法相反,只保留后面的n项数据进行发射,而忽略前面的结果~

示例代码:

Observable

.just(1, 2, 3, 4, 5)

.takeLast(3)

.subscribe(new Action1() {

@Override

public void call(Integer integer) {

System.out.println("onNext -->" + integer);

}

});

运行结果:

bfd0b780344a

takeLast示例

结语

过滤类操作符,就简单介绍到这里,希望能够对同学有所帮助,谢谢~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值