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深入理解之自己動手編寫RxjavaRxJava
- 大話RxJava:一、初識RxJava與基本運用RxJava
- 大話RxJava:三、RxJava的中級使用方法RxJava
- 關於 RxJava 最友好的文章—— RxJava 2.0 全新來襲RxJava
- RxJava_distinct&distinctUntilChangedRxJava
- RxJava 合併操作RxJava
- RxJava快速入門RxJava
- Android RxJava:這是一份RxJava使用入門學習指南AndroidRxJava
- [譯] RxJava JDBC 簡介RxJavaJDBC
- Rxjava工作原理總結RxJava
- RxJava 系列-3:使用 SubjectRxJava
- RxJava/RxAndroid/AutoDispose/RxBinding/RxBusRxJavaAndroid
- 2章 RxJava基本使用RxJava
- RxJava基礎使用(一)RxJava
- RxJava + Retrofit原始碼解析RxJava原始碼
- RxJava2 學習(一)RxJava
- RxJava2 學習(二)RxJava
- RxJava2原始碼分析RxJava原始碼
- Retrofit2<三> rxJava 分析RxJava
- 3章 RxJava操作符RxJava
- 5章 RxJava背壓策略RxJava
- 9章 RxJava混合實戰RxJava
- 10章 RxJava原始碼分析RxJava原始碼
- 使用RxJava實現快取RxJava快取
- RxJava(RxKotlin)、RxAndroid 簡單使用RxJavaKotlinAndroid
- Android開發之從零開始學RxJava 2.x(一)認識RxjavaAndroidRxJava
- RxJava 系列-1:一篇的比較全面的 RxJava2 方法總結RxJava
- RxJava2 原始碼解析(一)RxJava原始碼
- Rxjava2最全面的解析RxJava
- RxJava 系列-2:背壓和 FlowableRxJava
- 四. RxJava之基本原理RxJava
- RxJava2 系列-3:使用 SubjectRxJava
- part05_Rxjava操作符RxJava
- part06_Rxjava背壓原理RxJava
- Retrofit2+RxJava 簡單使用RxJava
- Rxjava2解析-訂閱流程RxJava