以下是示例:
Student[] students = ...;
Subscriber<Course> subscriber = new Subscriber<Course>() {
@Override
public void onNext(Course course) {
Log.d(tag, course.getName());
}
...
};
Observable.from(students)
.flatMap(new Func1<Student, Observable<Course>>() {
@Override
public Observable<Course> call(Student student) {
return Observable.from(student.getCourses());
}
})
.subscribe(subscriber);
观察课程很容易,但如果我想打印出这对学生课程怎么办?是否有必要将Observable<Course>
更改为Observable<Pair<Student, Course>>
?这种方法可能非常繁琐,因为在转换过程中我们可能有多个运算符,但我们不希望Pairs
一直保持变换observable。
我们可以根据转换过的那个参考原始项目吗?
答案 0 :(得分:0)
根据您的目标和实施情况,您可以使用flatMap
这样的重载变体:
Observable.from(students)
.flatMap(new Func1<Student, Observable<Course>>() {
@Override
public Observable<Course> call(Student student) {
return Observable.from(student.getCourses());
}
}, new Func2<Student, Course, Void>() {
@Override
public Void call(Student student, Course course) {
Log.d(tag, student + "->" + course.getName());
return null;
}
})
.subscribe();
答案 1 :(得分:0)
students.doOnNext(new Action1<String>() {
@Override
public void call(String student) {
ArrayList<String> studentCourses = courses.get(student);
for (int i=0 ; i<studentCourses.size() ; i++) {
System.out.println(student + " -> " + studentCourses.get(i) + " " + test);
}
}
})
.subscribe(new Subscriber<String>() {
@Override
public void onNext(String s) { /*System.out.println(s); */}
@Override
public void onCompleted() { }
@Override public void onError(Throwable e) { }
});