What I'm trying to achieve is that flowB
is just (re)subscribed when flowA
emits a value different of null
. But there is no standard way to do that (as I can see).
In my scenario, flowB
is expensive to keep emitting values without need, so what I need is a way to unsubscribe from it when flowA
is equal to null
, but resubscribe when it has a (not null
) value.
If I use something like takeWhile
(testing for null
values) before combine
, what happens is that flowA
completes in the first negative result and it will not receive updates anymore.
With filterNotNull
I cannot achieve what I'm trying to do either, because the streaming will keep running with previous values (it will not stop when a null
is received).
Anyone has any suggestions on how to achieve that with the standard operators?
Or it should be done as a new (custom) operator (like combineWhenNotNull
), for instance? Any tips on how to achieve this behavior?
flowA
.combine(flowB) { a, b ->
if (a != null) {
Log.d(TAG, "$a -> $b")
}
}
This is the base logic of the streaming, but this way flowB
keeps emitting values, even when flowA
is emitting null
(that is what I want to avoid).
flatMapLatest