定义:Map操作符对原始Observable发射的每一项数据应用一个你选择的函数,然后返回一个发射这些结果的Observable。
基本格式:map(Func1)
map函数只有一个参数,参数一般是Func1,它的两个类型参数,一个是输入的类型,一个是输出的类型。
对Observable发射的每一项数据应用一个函数,执行变换操作。
官方流程图:
代码示例:
map的基本用法:
Person p1 = new Person("tom");
Person p2 = new Person("jack");
Person p3 = new Person("jan");
Observable.just(p1, p2, p3).map(new Func1<Person, String>() {
@Override public String call(Person p) {
return p.getName();
}
}).subscribe(new Action1<String>() {
@Override public void call(String name) {
System.out.println("输出结果:" + name);
}
});
再举个例子
Observable.just(p1, p2, p3).map(new Func1<Person, List<Cat>>() {
@Override public List<Cat> call(Person p) {
return p.getCats();
}
}).subscribe(new Action1<List<Cat>>() {
@Override public void call(List<Cat> cats) {
for (Cat cat : cats)
System.out.println("输出结果:" + cat.getName());
}
});
}
从上面的示例可以看出map在处理List的时候使用for循环,对于响应式编程来说是冗繁而且缺乏规范的,再者就是List数据源是有厚度的,我们需要用某种方法把这种厚度给抹平,把原本一个整体弹出的数据源想办法转换为单个独立弹出的数据,所以才有了flat——扁平化的map,可以让程序更加的简洁和整体的逻辑性更强,