Verwenden Sie ein Transformer, die die Quelle beobachtbare modifiziert, eine flatMap
auf sie mit einer Funktion aufrufen. Sie können als 2-Stufen-Prozess daran denken:
- Die Funktion nimmt jede emittierte Punkt (ein
Iterable<T>
) und erneut emittiert es als Observable<T>
flatMap
nimmt jede dieser emittierten Observable<T>
Objekte ein, sie verschmilzt in eine einzige Observable<T>
Der Transformator sieht wie folgt aus:
public class FlattenTransform<T> implements Observable.Transformer<Iterable<T>, T> {
@Override
public Observable<? extends T> call(Observable<? extends Iterable<T>> source) {
return source.flatMap(new Func1<Iterable<T>, Observable<T>>() {
@Override
public Observable<T> call(Iterable<T> values) {
return Observable.from(values);
}
});
}
}
Nachdem Sie Ihre Transformer erstellt haben, können Sie compose
verwenden, um die Transformation auf der Quelle beobachtbaren anwenden:
public class Example {
private static final ArrayList<Long> sourceList = new ArrayList<>(Arrays.asList(new Long[] {1L,2L,3L}));
private static final Observable<ArrayList<Long>> listObservable = Observable.just(sourceList);
private static final FlattenTransform<Long> flattenList = new FlattenTransform<Long>();
public static void main(String[] args) {
listObservable.compose(flattenList).subscribe(printItem);
}
private static Action1<Long> printItem = new Action1<Long>() {
@Override
public void call(Long item) {
System.out.println("item: " + item);
}
};
}
Der von Vorteil, eine compose
mit einem Transformer
anstelle eines flatMap
mit einem Func1
ist, dass, wenn in der Zukunft, wenn Sie eine Liste wieder flattern müssen, müssen Sie nicht einmal darüber nachdenken, welcher Operator zu verwenden ist (Karte? FlacheKarte? concatMap?). Mit anderen Worten, die Flatmap-Operation wird in die FlattenTransform-Klasse eingebettet, und dieses Detail wird abstrahiert.
Transformatoren haben auch andere Vorteile, z. B. in der Lage, mehrere Operationen zu verketten.
wichtig ist, bestellen? – lopar
Nicht wirklich, aber für Bildungszwecke ist wirklich beide Versionen zu sehen –