java中contact方法_RxJava2 转换操作符之ContactMap()和flatMapIterable()

前言:

1、学习这两个操作符之前,请确保你读过这篇文章:RxJava2 转换操作符之FlatMap()方法,或者已经充分了解FlatMap()。

2、因为这两个操作符,跟FlatMap只有一点不同,所以,将它们独立的,合并在一篇中。

一、ContactMap操作符

ContactMap是用来解决FlatMap操作符,在转换数据的过程,会出现任务交叉的问题。如果,你对数据转换的过程,要求严格的按顺序执行。即执行完一个任务后,再执行另一个任务。那么,就用ContactMap替代FlatMap。用法一模一样,就换个名字而已。

c3f523e2206a2e9a50cd84fe6dba9ec9.png

ContactMap操作符流程图

代码示例:

public static void actionFlatMap() {

List list = Arrays.asList(1, 2, 3);

// 这里用了lambda。

Observable.fromIterable(list)

.concatMap(integer ->{

log("开始执行,第" + integer + "圆球的任务" + getThreadName());

return getObservable(integer);

}).subscribe(s ->log("已完成" + s + getThreadName()));

}

public static Observable getObservable(final int integer) {

return Observable.create((ObservableOnSubscribe) emitter ->{

emitter.onNext("第" + integer + "圆球的第1个棱形任务");

if(integer != 1) {

// 第2和第3个圆球的第二个任务延时。

Thread.sleep(5 * 1000);

}

emitter.onNext("第" + integer + "圆球的第2个棱形任务");

emitter.onComplete();

}).subscribeOn(Schedulers.newThread());

}

// 返回当前的线程名

public static String getThreadName() {

return " | ThreadName=" + Thread.currentThread().getName();

}

private static void log(String log) {

Log.d("FlatMap", log);

}

二、flatMapIterable操作符

flatMapIterable操作与flatMap,在流程上,大体都相同。唯一不同的是,flatMap是转一个Observable 转换成多个Observables。每一个Observable,最后又得返回一个Observable。而flatMapIterable在将一个Observable转换成多个Observables后,每一个Observable,只能返回一个Iterable。而不是另一个Observable。。。 Iterable,可以理解成返回一个list。

先上图,再上码:

a7ca8e0326da9e15c4d3b9da59a37e8f.png

flatMapIterable操作符流程图

代码示例:

public static void actionFlatMapIterable() {

List list = Arrays.asList(1, 2, 3);

Observable.fromIterable(list)

.flatMapIterable(new Function>() {

@Override

public Iterable apply(Integer integer) throws Exception {

return Arrays.asList(String.valueOf("a"+integer), String.valueOf("b"+integer), String.valueOf("c"+integer));

}

}).subscribe(new Consumer() {

@Override

public void accept(String s) throws Exception {

log("accept="+s);

}

});

}

这是输出:

D/TransformingOperations: accept=a1

D/TransformingOperations: accept=b1

D/TransformingOperations: accept=c1

D/TransformingOperations: accept=a2

D/TransformingOperations: accept=b2

D/TransformingOperations: accept=c2

D/TransformingOperations: accept=a3

D/TransformingOperations: accept=b3

D/TransformingOperations: accept=c3

以上是两个操作符的简介和示例代码,这两个比较简单,就不赘述了。下一篇是讲解:SwitchMap()操作符。

注意:

这个库里面有很多东西,RxJava2的转换操作符部分的demo位于:com.lyf.okmvp.demo.rxjava2包下的TransformingOperations类里面。

用法:

1、直接在com.lyf.okmvp.ui包下的MainActivity类里的onCreate()方法里面,直接调用:

TransformingOperations.actionContactMap(); // 静态方法。

TransformingOperations.actionFlatMapIterable(); // 静态方法。

2、也可以复制TransformingOperations类到你的项目里,去为所欲为。但前提时,你得有配置过RxJava和RxAndroid。配置方法,自行百度,或参考我的OkMVP库。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值