在 RxJava- 操作符之过滤Observables了解到,RxJava过滤操作符的基本使用,主要是针对Observable列表。本篇主要针对Observable列表中对象操作符的使用。用于变换可观测序列来创建一个能够更好的满足我们需求的序列。
map
map操作符通过指定一个的Func对象,将Observables转换为一个新的Observable对象并发射,观察者将收到新的Observable处理。map操作符的流程图如下:
示例代码:
Observable.from(mLists)
.map(new Func1<Student, Student>() {
@Override
public Student call(Student student) {
StringBuilder sb = new StringBuilder();
String age = student.getAge();
sb.append("AGE - ");
sb.append(age);
student.setAge(sb.toString());
return student;
}
})
.subscribe(new Observer<Student>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Student student) {
mAdaStu.addData(student);
}
});
正如你看到的,像往常一样创建我们发射的Observable之后,追加一个map调用,在其回调call方法中,将age字段添加“AGE - ”, 更新对象后发射,观察者接收到的是更新后的Observable。
flatMap
flatMap操作符用于发射的一个数据序列,而这些数据同时本身拥有发射Observable。flatMap是以铺平序列的方式,然后合并这些Observables发射的数据,最后将合并后的结果作为最终的Observable。但是,flatMap()可能交错的发送事件,最终结果的顺序可能并是不原始Observable发送时的顺序。flatMap操作符的流程图如下:
示例代码:
private void doFlatMap() {
List<String> lists = new ArrayList<>();
lists.add("Flat - A");
lists.add("Flat - B");
lists.add("Flat - C");
lists.add("Flat - D");
Observable.from(lists)
.flatMap(new Func1<String, Observable<Student>>() {
@Override
public Observable<Student> call(String s) {
return getStudentData(s);
}
})
.subscribe(new Observer<Student>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Student student) {
mAdaStu.addData(student);
}
});
}
// 针对不同的s发射不同的Observable序列
private Observable<Student> getStudentData(final String s) {
List<Student> lists_0 = new ArrayList<>();
if (TextUtils.equals("Flat - A", s) || TextUtils.equals("Concat - A", s)) {
lists_0.add(new Student(s + "11", "20", "1101"));
lists_0.add(new Student(s + "12", "20", "1102"));
lists_0.add(new Student(s + "13", "20", "1103"));
} else if (TextUtils.equals("