【发布时间】:2014-05-15 20:10:43
【问题描述】:
你什么时候在 RxJava 中使用 map 和 flatMap?
例如,我们想将包含 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 的错误处理(而不是冗长)。我还没有看到任何关于这个浮动的最佳实践,我很好奇它是如何在实践中使用的。
【问题讨论】:
标签: java mapping rx-java flatmap