转载请标明出处:http://77blogs.com/?p=175
map的作用:对Observable发射的数据都应用一个函数,然后再发射最后的结果集。最后map()方法返回一个新的Observable。
举个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
final List<Integer> list = new ArrayList<Integer>() { { add(0); add(1); add(2); } }; Observable.fromIterable(list).map(new Function<Integer, Integer>() { @Override public Integer apply(Integer integer) throws Exception { return integer + 1; } }).toList().map(new Function<List<Integer>, List<Integer>>() { @Override public List<Integer> apply(List<Integer> integers) throws Exception { List<Integer> listInteger = new ArrayList<>(); listInteger.add(4); return listInteger; } }) .toObservable().subscribeOn(Schedulers.io()) .subscribeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer() { @Override public void accept(Object o) throws Exception { Log.d(TAG, o.toString()); } }); |
首先遍历集合中的每一个项,然后给map进行映射更改,每一项都加一,然后再转换为集合,然后再将该集合传入map中,在map中加入新的项4,最后给观察者的回调方法,输出该集合。
打印的log为:
12-23 21:46:36.691 3072-3102/com.status.rxjavasample D/RxJavaHelper: [4]
中间可以有多个map操作符。
.map(new Function<Integer, Integer>(){}中的Function里面的泛型参数,第一个是指输入的类型,第二个是指输出的类型。
再看下面这个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
final List<Integer> list = new ArrayList<Integer>() { { add(0); add(1); add(2); } }; Observable.fromIterable(list).map(new Function<Integer, Integer>() { @Override public Integer apply(Integer integer) throws Exception { return integer + 1; } }).subscribeOn(Schedulers.io()) .subscribeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer() { @Override public void accept(Object o) throws Exception { Log.d(TAG, o.toString()); } }); |
输出的log为:
12-30 21:45:25.713 32565-32611/com.status.rxjavasample D/RxJavaHelper: 1
12-30 21:45:25.713 32565-32611/com.status.rxjavasample D/RxJavaHelper: 2
12-30 21:45:25.713 32565-32611/com.status.rxjavasample D/RxJavaHelper: 3