Issue
Help please, How to summarize two Single<Optional> in java 11 ?
I am using RxJava but I don't think it means anything.
for example:
Single<Optional<MonetaryAmount>> first = someMethod1(a, b);
Single<Optional<MonetaryAmount>> second = someMethod2(a, b);
I want to do something like this not syntactically but logically
Single<Optional<MonetaryAmount>> result = first + second;
I tried to do something like this but it doesn't work in java 11
Single<Optional<MonetaryAmount>> result = Stream.concat(first, second)
.reduce(MonetaryAmount::sum);
Do you have some idea ?
Solution
Use concatMapSingle
and mapOptional
to get to the present values:
Observable<Single<Optional<MonetaryAmount>>> amounts =
Observable.fromArray(first, second);
amounts.concatMapSingle(v -> v)
.mapOptional(v -> v) // RxJava 3
.reduce(MonetaryAmount::sum)
;
For RxJava 2, use a filter+map combo:
.filter(Optional::isPresent)
.map(Optional::get)
Answered By - akarnokd
Answer Checked By - Timothy Miller (JavaFixing Admin)