当前位置: 首页>移动开发>正文

rxjava 组合zip rxjava map

概述

RxJava2 的名气是越来越大,对应的在开发中使用的就越来越多,而日常开发中最长打交道的就是那些操作符(Operators),本文目的仅仅是为了记录map操作符的使用方法及场景,不会太多涉及Rxjava2本身的知识。如需详细学习,请移步官方网址:

操作符

首先应该明白操作符是用来干什么的,RxJava以存在一个数据流的概念,从Observable发射数据,数据流经过操作符的处理,最后被Observer接收到,然后消费掉. 如下图所示

rxjava 组合zip rxjava map,rxjava 组合zip rxjava map_flatMap,第1张

今天要将的map就是其中一个。

map 操作符

如何学习

其实官方文档已经非常贴心了,除了文字还有配图,然而就是这么详细的文档,我们在不熟悉的时候仍然是看不懂,而且会有抵触。不过我们应该克服内心的抵触,优先查看官方文档,例如通过官方文档的配图,我们基本上就可以大体明白map是干什么用的。

rxjava 组合zip rxjava map,rxjava 组合zip rxjava map_android_02,第2张

这个图如何看呢?

首先第一行代表的是Observeable发射的原始数据,假设我们发送的是一个整型数组,假设上图就代表[1,2,3,4,5,6],那么1是红圆,2是黄圆以此类推;中间表示操作符map的操作;第三行是经过中间操作符变换后的数据流。可以从图中看到,map的作用就是将一个圆变换为一个菱形,而且是对每一个元素进行变换。例如我们的map功能是把整型变为字符串,那么最终的数据就会变为[“1”,“2”,“3”,“4”,“5”,“6”].

map详解

官方解释:

Returns an Observable that applies a specified function to each item emitted by the source ObservableSource and emits the results of these function applications.
map会对原始Observable 发射的每个数据都应用一个用户定义的转换操作,然后返回一个Observable,这个Observable再发射数据时就是被map改变过的数据了。

例如我们对一个整型数组的每个元素都做一个变换,如下代码所示:

Observable.range(1,3)
          .map(new Function<Integer, String>() {
              @Override
              public String apply(Integer integer) throws Exception {
                  return String.format("我从Integer %s 变成了String %s",integer,integer);
              }
          }).subscribeOn(Schedulers.computation())
          .observeOn(AndroidSchedulers.mainThread())
          .subscribe(new Consumer<String>() {
              @Override
              public void accept(String s) throws Exception  {
                  Log.d("Map",s);
              }
          });

输出结果为:

我从Integer 1 变成了String 1
我从Integer 2 变成了String 2
我从Integer 3 变成了String 3

可见,Observable发射的第一个元素通过我们自定义的变换函数变成了我从Integer 1 变成了String 1,以此类推。

使用场景

map的使用场景非常普遍,只要数据源与我们最终需要的数据格式不一致的场景下都可以使用map变换。


https://www.xamrdz.com/mobile/4jx1959927.html

相关文章: