RX-java2可观测数据的重复消耗
我有3个观测值,第一个观测值的输出是第二个观测值所需要的。第一个和第二个可见光的输出是第三个可见光所需要的RX-java2可观测数据的重复消耗,java,concurrency,rx-java,reactive-programming,rx-java2,Java,Concurrency,Rx Java,Reactive Programming,Rx Java2,我有3个观测值,第一个观测值的输出是第二个观测值所需要的。第一个和第二个可见光的输出是第三个可见光所需要的 Observable<String> observableOne = Observable .just("{1}") .map(v -> { System.out.println("Executing Observable 1"); return v; });
Observable<String> observableOne = Observable
.just("{1}")
.map(v -> {
System.out.println("Executing Observable 1");
return v;
});
Observable<String> observableTwo = observableOne
.map(observableOneValue -> {
System.out.println("Executing Observable 2");
return "{2"+observableOneValue+"}";
});
Observable.zip(
observableOne,
observableTwo,
(observableOneValue, observableTwoValue) ->
{
System.out.println("Executing Observable 3");
return "{3"+observableOneValue+observableTwoValue+"}";
}
).blockingSubscribe(System.out::println);
observeable-observeOne=可观察
.just(“{1}”)
.map(v->{
System.out.println(“执行可观察1”);
返回v;
});
可观察到的可观察到的
.map(observableOneValue->{
System.out.println(“执行可观察2”);
返回“{2”+observeOnEvalue+”}”;
});
可观察的.zip(
可见的,
所以,,
(observeToEvalue,observeToEvalue)->
{
System.out.println(“执行可观察3”);
返回“{3”+observeToEvalue+observeToEvalue+“}”;
}
).blockingSubscribe(System.out::println);
这将重复执行第一个可观察到的,我当然可以使第一个可观察到的可缓存。但我想知道是否还有比这更好的选择,特别是我正在寻找从第一个观察到另两个观察到的某种消息传递结构我不确定“消息传递结构”到底在寻找什么<代码>缓存将适用于上面的示例,但您提到您不想使用它 另一个可能适合您的用例的选项是使用。它仅在您对其调用
connect
时开始发射项目,而不是在订阅时。通过调用publish
将您的observeOne
转换为connectableobserveable
。然后设置所有订阅服务器。然后调用observeOne
上的connect
ConnectableObservable<String> observableOne = Observable
.just("{1}")
.map(v -> {
System.out.println("Executing Observable 1");
return v;
}).publish();
Observable<String> observableTwo = observableOne
.map(observableOneValue -> {
System.out.println("Executing Observable 2");
return "{2"+observableOneValue+"}";
});
Observable.zip(
observableOne,
observableTwo,
(observableOneValue, observableTwoValue) ->
{
System.out.println("Executing Observable 3");
return "{3"+observableOneValue+observableTwoValue+"}";
}
).subscribe(System.out::println);
// Call when all the subscribers are ready --
observableOne.connect();
ConnectableObservableOne=可观察
.just(“{1}”)
.map(v->{
System.out.println(“执行可观察1”);
返回v;
}).publish();
可观察到的可观察到的
.map(observableOneValue->{
System.out.println(“执行可观察2”);
返回“{2”+observeOnEvalue+”}”;
});
可观察的.zip(
可见的,
所以,,
(observeToEvalue,observeToEvalue)->
{
System.out.println(“执行可观察3”);
返回“{3”+observeToEvalue+observeToEvalue+“}”;
}
).subscribe(System.out::println);
//当所有订户都准备好时呼叫--
connect();
注释
现在是一个observeOne
connectableobserveable
- 需要使用
而不是subscribe
,这样代码将执行blockingSubscribe
调用connect