定義: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,可以讓程序更加的簡潔和整體的邏輯性更強,