map将一个事件转换为另一个事件。
flatMap将一个事件转换为零个或多个事件。(摘自IntroToRx)
当您想将json转换为对象时,使用map应该就足够了。
处理FileNotFoundException是另一个问题(使用地图或平面地图无法解决此问题)。
要解决您的Exception问题,只需将其与Non Checked异常一起抛出:RX将为您调用onError处理程序。
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) { // this exception is a part of rx-java throw OnErrorThrowable.addValueAsLastCause(e, file); } }});与flatmap完全相同的版本:
Observable.from(jsonFile).flatMap(new Func1<File, Observable<String>>() { @Override public Observable<String> call(File file) { try { return Observable.just(new Gson().toJson(new FileReader(file), Object.class)); } catch (FileNotFoundException e) { // this static method is a part of rx-java. It will return an exception which is associated to the value. throw OnErrorThrowable.addValueAsLastCause(e, file); // alternatively, you can return Obersable.empty(); instead of throwing exception } }});您也可以在flatMap版本中返回一个新的Observable,这只是一个错误。
Observable.from(jsonFile).flatMap(new Func1<File, Observable<String>>() { @Override public Observable<String> call(File file) { try { return Observable.just(new Gson().toJson(new FileReader(file), Object.class)); } catch (FileNotFoundException e) { return Observable.error(OnErrorThrowable.addValueAsLastCause(e, file)); } }});


