Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我应该如何在RxJava中建模流程?_Java_Design Patterns_Rx Java_Reactive Programming_Rx Java2 - Fatal编程技术网

我应该如何在RxJava中建模流程?

我应该如何在RxJava中建模流程?,java,design-patterns,rx-java,reactive-programming,rx-java2,Java,Design Patterns,Rx Java,Reactive Programming,Rx Java2,假设我有一些过程,比如下载一个文件或者运行一个大的计算 它触发的事件可能如下所示: { progress: "0%" } { progress: "23%" } { progress: "78%" } { progress: "100%" } { content: "Hello. world. " } 或许: { progress: "0%" } { progress: "23%" } { error: "Access denied. " } 在每种情况下,我们都有n个状态更新T,之后是结果

假设我有一些过程,比如下载一个文件或者运行一个大的计算

它触发的事件可能如下所示:

{ progress: "0%" }
{ progress: "23%" }
{ progress: "78%" }
{ progress: "100%" }
{ content: "Hello. world. " }
或许:

{ progress: "0%" }
{ progress: "23%" }
{ error: "Access denied. " }
在每种情况下,我们都有n个状态更新T,之后是结果S或错误抛出:

一个过程是可观察和单一过程的混合

有几种方法可以使用Rx原语对流程建模:

一对可观察到的、单一的 可见的 一个可观察的实例,用于调用强制转换 一种新的原始过程及其toObservable和toSingle方法 等 过去是如何成功建模的

哪些方法是最好的,什么时候应该使用

让我们马上排除对象加实例的可能性。这是通往疯狂的必经之路

这将取决于如何使用T和S结果。我认为T应该是S的容器

这就足够了。如果需要状态报告显示在其他位置,请使用

observable.filter( t-> t.isStatus() )

这将为您提供

@sdgfsdh您提到的两种情况;反对意见是什么?啊,对不起,我看错了。此解决方案与上述任一解决方案相同。这并不能保证只有最后一个值是成功的。可能是一个合理的折衷方案。在Rx中,错误总是一个终端事件;如果您确实需要正常流中的错误,您可以始终执行.onErrorResumeNextt->Observable.justnew ErrorInstancet。
class T<S> {
  public boolean isSuccess() { ... }
  public boolean isStatus() { ... }
  public Status getStatus() { ... }
  public S getResult() { ... }
}
observable
  .filter( t -> t.isSuccess() )
  .last()
  .map( t -> t.getResult() )
  .toSingle()
observable.filter( t-> t.isStatus() )