RxJavamap
でvsflatMap
をいつ使用しますか?
たとえば、JSON を含むファイルを JSON を含む文字列にマップするとします。
を使用して、何とかmap
対処する必要があります。Exception
しかし、どのように?:
Observable.from(jsonFile).map(new Func1<File, String>() {
@Override public String call(File file) {
try {
return new Gson().toJson(new FileReader(file), Object.class);
} catch (FileNotFoundException e) {
// So Exception. What to do ?
}
return null; // Not good :(
}
});
を使用するflatMap
と、はるかに冗長になりますが、問題を のチェーンに転送し、Observables
別の場所を選択して再試行した場合にエラーを処理できます。
Observable.from(jsonFile).flatMap(new Func1<File, Observable<String>>() {
@Override public Observable<String> call(final File file) {
return Observable.create(new Observable.OnSubscribe<String>() {
@Override public void call(Subscriber<? super String> subscriber) {
try {
String json = new Gson().toJson(new FileReader(file), Object.class);
subscriber.onNext(json);
subscriber.onCompleted();
} catch (FileNotFoundException e) {
subscriber.onError(e);
}
}
});
}
});
のシンプルさが気に入っていますが、 (冗長さではなく)map
のエラー処理が気に入っています。flatmap
これに関するベストプラクティスは見たことがなく、実際にどのように使用されているのか興味があります.