RXJAVA
from vs just
just
內部就是呼叫的from
,但just
最多隻能接受9個引數
map vs flatmap
-
map
和flatmap
返回的都是Observable
-
flatmap
的引數FuncX
的最後一個模板引數必須是從Observable
派生,也就是flatmap
實際返回的型別;而map
的引數FuncX
的最後一個模板引數則和map
返回的Observable
的模板引數是一致的 - 如果是1對1的轉換,則
map
和flatmap
都可以。 - 如果是1對多的轉換,則應該使用
flatmap
,這是因為map
的FuncX
返回的不是Observable
, 沒有辦法實現1對多;而flatmap
的FuncX
返回的是Observable
,FuncX
內部可以返回Observable.from(...)
,實現1對多的轉換,例如:
/**
* 學生類
*/
class Student {
private String name;//姓名
private List<Course> coursesList;//所修的課程
...
}
/**
* 課程類
*/
class Course {
private String name;//課程名
private String id;
...
}
如果使用map來實現列印所有學生所修個課程名,實現的程式碼是這樣的:
List<Student> students = new ArrayList<Student>();
students.add...
...
Action1<List<Course>> action1 = new Action1<List<Course>>() {
@Override
public void call(List<Course> courses) {
//遍歷courses,輸出cuouses的name
for (int i = 0; i < courses.size(); i++){
Log.i(TAG, courses.get(i).getName());
}
}
};
Observable.from(students)
.map(new Func1<Student, List<Course>>() {
@Override
public List<Course> call(Student student) {
//返回coursesList
return student.getCoursesList();
}
})
.subscribe(action1);
可以看到,在Action1中出現了for來迴圈列印課程名,使用RxJava就是為了剔除這樣的巢狀結構,使得整體的邏輯性更強。這時候就可以使用flatMap了,使用flatMap實現的程式碼是這樣的:
List<Student> students = new ArrayList<Student>();
students.add...
...
Observable.from(students)
.flatMap(new Func1<Student, Observable<Course>>() {
@Override
public Observable<Course> call(Student student) {
return Observable.from(student.getCoursesList());
}
})
.subscribe(new Action1<Course>() {
@Override
public void call(Course course) {
Log.i(TAG, course.getName());
}
});
這樣就實現了跟上面程式碼一樣的效果。
Thread
- 如果利用
subscribeOn
指定了subscribe執行緒(事件產生的執行緒),則諸如map
,filter
,take
等操作符都是在subscribe執行緒上執行的。 - 如果指定了subscribe執行緒,但沒有利用
observeOn
指定observe執行緒(事件消費的執行緒),則observer的action都是執行在subscribe執行緒上的。
相關文章
- RxJava小考題 -- Rxjava原始碼分析(一)RxJava原始碼
- RxJava梳理RxJava
- Retrofit + RxJavaRxJava
- RxJava ,lift()RxJava
- RxJava 初探RxJava
- RxJava 知識梳理(1) RxJava 基本思想RxJava
- 淺談RxJavaRxJava
- RxJava之SchedulerRxJava
- RxJava 入門RxJava
- Rxjava基礎RxJava
- Rxjava深入理解之自己動手編寫RxjavaRxJava
- 大話RxJava:一、初識RxJava與基本運用RxJava
- 大話RxJava:三、RxJava的中級使用方法RxJava
- Rxjava1升級到Rxjava2的工作RxJava
- RxJava 沉思錄(一):你認為 RxJava 真的好用嗎?RxJava
- 關於 RxJava 最友好的文章—— RxJava 2.0 全新來襲RxJava
- 擁抱RxJava(番外篇):關於RxJava的Tips & TricksRxJava
- RxJava2與RxJava1的簡單對比RxJava
- Android RxJava使用介紹(二) RxJava的操作符AndroidRxJava
- Android RxJava使用介紹(三) RxJava的操作符AndroidRxJava
- Android RxJava使用介紹(四) RxJava的操作符AndroidRxJava
- RxJava 合併操作RxJava
- RxJava_distinct&distinctUntilChangedRxJava
- RxJava使用總結RxJava
- rxjava筆記(1)RxJava筆記
- 當RxJava遇到AOPRxJava
- 徹底搞懂 RxJavaRxJava
- RxJava原始碼初探RxJava原始碼
- RxJava入門指南RxJava
- RxJava快速入門RxJava
- RxJava 知識梳理(2) RxJava2 操作符實戰RxJava
- RxJava1 升級到 RxJava2 所踩過的坑RxJava
- RxJava 知識梳理(3) RxJava2 基礎知識小結RxJava
- [譯] RxJava JDBC 簡介RxJavaJDBC
- 2章 RxJava基本使用RxJava
- Rxjava工作原理總結RxJava
- RxJava + Retrofit原始碼解析RxJava原始碼
- RxJava基礎使用(一)RxJava