假设我有两种事件类型(A
和B
)和Flux
es以某种方式生成它们:
Flux<A> aFlux = ...;
Flux<B> bFlux = ...;
还有一个类型,它保存当前状态由S
类型表示:
class S {
final int val;
}
我想创建以下内容:
final S sInitial = ...;
Flux<S> sFlux = Flux.merge(aFlux, bFlux)
.scan((a, e) -> {
if(e instanceof A) {
return mapA(a, (A)e);
} else if(e instanceof B) {
return mapB(a, (B)e);
} else {
throw new RuntimeException("invalid event");
}
})
.startWith(sInitial);
其中sCurr
是qFxswpoi的实例,最后由sFlux输出,从S
开始,sInitial
/ mapA
返回mapB
类型的新值。 S
和S
都是不变的。
也就是说,我想:
有没有办法以其他方式重组上面的流流,特别是为了避免使用sInitial
?
您可以添加界面并为A和B类实现它
aFlux = ...; Flux bFlux = ...; and also a type that holds the current state denoted by type S:...
现在你可以使用interface ToSConvertible {
S toS(S s);
}
方法:
reactor.core.publisher.Flux#scan(A, java.util.function.BiFunction<A,? super T,A>)