从RxJava 1到RxJava 2
我正在尝试将这个RxJava1代码转换为RxJava2从RxJava 1到RxJava 2,java,rx-java,Java,Rx Java,我正在尝试将这个RxJava1代码转换为RxJava2 public static Observable<Path> listFolder(Path dir, String glob) { return Observable.<Path>create(subscriber -> { try { DirectoryStream<Path> stream = Files.
public static Observable<Path> listFolder(Path dir, String glob) {
return Observable.<Path>create(subscriber -> {
try {
DirectoryStream<Path> stream =
Files.newDirectoryStream(dir, glob);
subscriber.add(Subscriptions.create(() -> {
try {
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}));
Observable.<Path>from(stream).subscribe(subscriber);
} catch (DirectoryIteratorException ex) {
subscriber.onError(ex);
} catch (IOException ioe) {
subscriber.onError(ioe);
}
});
}
公共静态可观察列表文件夹(路径目录,字符串全局){
返回可观察。创建(订户->{
试一试{
目录流=
newDirectoryStream(dir,glob);
subscriber.add(订阅.创建)(()->{
试一试{
stream.close();
}捕获(IOE异常){
e、 printStackTrace();
}
}));
可观察。来自(流)。订阅(订户);
}捕获(DirectoryIteratorException ex){
认购人。认购人(ex);
}捕获(ioe异常ioe){
认购人。一个错误(ioe);
}
});
}
问题是,在Rxjava2中,我没有让订阅者向它添加新的订阅 享受RxJava 2的简洁性(
Flowable
现在是背压支持类):
公共静态可流动列表文件夹(路径目录,字符串全局){
返回流。使用(
()->Files.newDirectoryStream(dir,glob),
流->可流动。可流动(流),
stream->stream.close());
}
如果您不需要背压,请将
可流动的
替换为可观察的
这与使用create类似,还是考虑了背压和所有因素?谢谢您的提问,我已经修改了答案以支持背压。
public static Flowable<Path> listFolder(Path dir, String glob) {
return Flowable.using(
() -> Files.newDirectoryStream(dir, glob),
stream -> Flowable.fromIterable(stream),
stream -> stream.close());
}