Разница между Map и FlatMap в RX

Если коротко, то Map к каждому излучаемому элементу применяет функцию и возвращает ее результат.

Observable<Integer> observable = Observable
.just(1,2,3)
.map(x -> 10 * x);

observable.subscribe(System.out::println);
Результат:
10
20
30

FlatMap так же применяет функцию к каждому излучаемому элементу, но эта функция функция возвращает тип Observable. Т.е. 1 излучаемый элемент может через flatMap породить множество излучаемых элементов или не одного.

Observable<String> observable = Observable
.just("A", "B", "C")
.flatMap(s -> {
System.out.println();
return Observable.just(s + "1", s + "2", s + "3");

});

observable.subscribe(s -> System.out.print(s + " "));
Результат:
A1 A2 A3
B1 B2 B3
C1 C2 C3

Источники: