1.前言
在前面的一篇文章中介绍了RxJava创建操作符的用法,如果对创建操作符不是很清楚的话建议去看看RxJava—创建操作符。在本章会开始聊聊RxJava中的转换操作符(Operators),转换操作符是为了解决对Observable对象的变换的问题,操作符用于在Observable和最终的Subscriber之间修改Observable发出的事件,RxJava中给我们提供了很多有用的操作符,在本章的内容中主要介绍转换操作符,常见的转换操作符有:Map()、FlatMap()、ConcatMap()、FlatMapIterable()、SwitchMap()、Scan()、GroupBy()等。
在本章的内容中主要介绍转换操作符,所有的这些操作符都是作用于一个可观测序列,然后变换它的发射值,最后用一种新的形式返回他们。
2.转换操作符的使用
(1)Map
map()函数接收一个Func1类型的参数(map(Func1<? super T, ? extends R> func)),然后把这个Func1应用到每一个Observable发射的值上,将发射值转换为我们所期望的值。(PS:Func1跟在RxJava—入门介绍中所提到的ActionX是相似的,都是实现不完整定义的回调,ActionX或者FuncX后面的X指的是传入的参数个数,只不过ActionX是没有返回值的,而FuncX是有返回值的)。
根据官方给出的原理图:
如果我们需要将一组数据转换称为字符串,我们就可以通过map这样实现:
mapButton.setOnClickListener(new View.OnClickListener()
{
public void onClick(View view)
{
Observable.just(1, 2, 3, 4, 5)
.map(new Func1<Integer, String>()
{
public String call(Integer integer)
{
return "This is" + integer;
}
})
.subscribe(new Action1<String>()
{
pub