如何在 RxJava 中对两个 Single<Optional<>> 值求和

问题描述 投票:0回答:1

如何总结Java 11中的两个

Single<Optional<MonetaryAmount>>

我正在使用 RxJava,但我认为这没有任何意义。

例如:

Single<Optional<MonetaryAmount>> first = someMethod1(a, b);
Single<Optional<MonetaryAmount>> second = someMethod2(a, b);

我想做这样的事情,不是语法上而是逻辑上:

Single<Optional<MonetaryAmount>> result = first + second;

我尝试做这样的事情,但它在 Java 11 中不起作用

Single<Optional<MonetaryAmount>> result = Stream.concat(first, second)
                                                .reduce(MonetaryAmount::sum);

我该怎么做?

java java-stream rx-java option-type java-11
1个回答
2
投票

使用

concatMapSingle
mapOptional
获取当前值:

Observable<Single<Optional<MonetaryAmount>>> amounts = 
    Observable.fromArray(first, second);

amounts.concatMapSingle(v -> v)
.mapOptional(v -> v) // RxJava 3
.reduce(MonetaryAmount::sum)
;

对于 RxJava 2,使用过滤器+映射组合:

.filter(Optional::isPresent)
.map(Optional::get)
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.