Here is the example:

```
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);

```

It's easy to observe courses, but what if I want to print out the pair of student-course? Is that necessary to change `Observable<Course>` to `Observable<Pair<Student, Course>>`? This method could be very tedious, because we could have multiple operators during transforming, but we don't want to keep the `Pairs` all the way transforming the observable.

Is that any other good way we can refer to the original item based on the transformed one?