1.普通订阅
Observable<String> observable = Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
emitter.onNext("1");
emitter.onNext("2");
emitter.onComplete();
emitter.onError(new Throwable());
}
});
Observer<String> observer = new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
};
observable.subscribe(observer);
2.just订阅
Observable.just(1, 2, 3, 4)
.subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
}
});
3.fromArray订阅
Integer array[] = {1, 2, 3, 4};
Observable.fromArray(array)
.subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
}
});
4.fromCallable订阅
Observable.fromCallable(new Callable<String>() {
@Override
public String call() throws Exception {
Log.d(TAG, "test4 call thread = " + Thread.currentThread().getName());
return "call";
}
}).subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
Log.d(TAG, "test4 accept thread = " + Thread.currentThread().getName());
}
});
5.fromFuture订阅
FutureTask<String> futureTask = new FutureTask<>(new Callable<String>() {
@Override
public String call() throws Exception {
return null;
}
});
Observable.fromFuture(futureTask)
.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
}
});
6.fromInterable订阅
ArrayList<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
Observable.fromIterable(list)
.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
}
});
7.defer订阅,要等订阅成功,才执行发射任务
Observable.defer(new Callable<ObservableSource<String>>() {
@Override
public ObservableSource<String> call() throws Exception {
return null;
}
}).subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
}
});
8.隔确定时间去执行任务
Observable.timer(2, TimeUnit.SECONDS).subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
}
});
9.间隔确定时间循环执行任务
Observable.interval(2, TimeUnit.SECONDS)
.subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
}
});
10.开始是3,自增3次,初始延长2s执行任务,后 隔2s再执行任务,输出3,4,5
Observable.intervalRange(3, 3, 2, 2, TimeUnit.SECONDS)
.subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
}
});
11.从2自增3次,输出2,3,4
Observable.range(2, 3)
.subscribe(new Observer<Integer>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Integer integer) {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
12,发射onComplete,不发送事件,发送Error事件
Observable.empty().subscribe(new Consumer<Object>() {
@Override
public void accept(Object o) throws Exception {
}
});
Observable.never().subscribe(new Consumer<Object>() {
@Override
public void accept(Object o) throws Exception {
}
});
Observable.error(new NullPointerException()).subscribe(new Consumer<Object>() {
@Override
public void accept(Object o) throws Exception {
}
});
13.map转换
Observable.just(1,3,4)
.map(new Function<Integer, String>() {
@Override
public String apply(Integer integer) throws Exception {
return String.valueOf(integer);
}
}).subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
}
});
14.flatMap转换
ArrayList<Student> list = new ArrayList<>();
list.add(new Student().setCourse("13","20"));
list.add(new Student().setCourse("23","30"));
list.add(new Student().setCourse("33","40"));
Observable.fromIterable(list)
.flatMap(new Function<Student, ObservableSource<String>>() {
@Override
public ObservableSource<String> apply(Student student) throws Exception {
return Observable.fromIterable(student.getCourese());
}
}).subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
}
});
class Student{
private List courses;
public Student setCourse(String math,String english) {
courses.add(math);
courses.add(english);
return this;
}
public List getCourese() {
return courses;
}
}
15.concatMap,和faltMap效果一样,但是有序等接受发射事件
ArrayList<Student> list = new ArrayList<>();
list.add(new Student().setCourse("13","20"));
list.add(new Student().setCourse("23","30"));
list.add(new Student().setCourse("33","40"));
Observable.fromIterable(list)
.concatMap(new Function<Student, ObservableSource<String>>() {
@Override
public ObservableSource<String> apply(Student student) throws Exception {
return Observable.fromIterable(student.getCourese());
}
}).subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
}
});