reactormonk
09/18/2024, 4:22 PMcombine()
7 flows? Use array & smartcast?Sergey Dmitriev
09/18/2024, 4:25 PMsomething as T
And yes, this is what out of the box combine
does anyway
public fun <T1, T2, T3, T4, T5, R> combine(
flow: Flow<T1>,
flow2: Flow<T2>,
flow3: Flow<T3>,
flow4: Flow<T4>,
flow5: Flow<T5>,
transform: suspend (T1, T2, T3, T4, T5) -> R
): Flow<R> = combineUnsafe(flow, flow2, flow3, flow4, flow5) { args: Array<*> ->
transform(
args[0] as T1,
args[1] as T2,
args[2] as T3,
args[3] as T4,
args[4] as T5
)
}
reactormonk
09/18/2024, 4:31 PMSergey Dmitriev
09/18/2024, 4:34 PMSergey Dmitriev
09/18/2024, 4:34 PMfun <T1, T2, T3, T4, T5, T6, T7, R> combine(
flow: Flow<T1>,
flow2: Flow<T2>,
flow3: Flow<T3>,
flow4: Flow<T4>,
flow5: Flow<T5>,
flow6: Flow<T6>,
flow7: Flow<T7>,
crossinline transform: suspend (T1, T2, T3, T4, T5, T6, T7) -> R
): Flow<R> {
return kotlinx.coroutines.flow.combine(flow, flow2, flow3, flow4, flow5, flow6, flow7) { args: Array<*> ->
@Suppress("UNCHECKED_CAST")
transform(
args[0] as T1,
args[1] as T2,
args[2] as T3,
args[3] as T4,
args[4] as T5,
args[5] as T6,
args[6] as T7,
)
}
}
Sergey Dmitriev
09/18/2024, 4:35 PMreactormonk
09/18/2024, 4:39 PMfun <A,B,C,D,E,F,Z> combine(
aF: Flow<A>,
bF: Flow<B>,
cF: Flow<C>,
dF: Flow<D>,
eF: Flow<E>,
fF: Flow<F>,
function: Function6<A, B, C, D, E, F, Z>
): Flow<Z> {
val combined =
kotlinx.coroutines.flow.combine(aF, bF, cF, dF, eF) { a, b, c, d, e ->
Tuple5(a, b, c, d, e)
}
return kotlinx.coroutines.flow.combine(combined, fF) { comb, f ->
function(comb.first, comb.second, comb.third, comb.fourth, comb.fifth, f)
}
}
Sergey Dmitriev
09/18/2024, 5:10 PMSergey Dmitriev
09/18/2024, 5:11 PMreactormonk
09/18/2024, 5:50 PMSergey Dmitriev
09/18/2024, 5:55 PMtransform
function, I think it should be possiblereactormonk
09/18/2024, 5:57 PMSergey Dmitriev
09/18/2024, 6:07 PMfun <A, B, C, D, E, F, Z> combine(
aF: Flow<A>,
bF: Flow<B>,
cF: Flow<C>,
dF: Flow<D>,
eF: Flow<E>,
fF: Flow<F>,
function: Function6<A, B, C, D, E, F, Z>
): Flow<Z> {
return combine(aF, bF, cF, dF, eF, fF) { a, b, c, d, e, f ->
function(a, b, c, d, e, f)
}
}
reactormonk
09/18/2024, 6:08 PMSergey Dmitriev
09/18/2024, 6:08 PMSergey Dmitriev
09/18/2024, 6:10 PMfun <A, B, C, D, E, F, Z> combine(
aF: Flow<A>,
bF: Flow<B>,
cF: Flow<C>,
dF: Flow<D>,
eF: Flow<E>,
fF: Flow<F>,
function: Function6<A, B, C, D, E, F, Z>
): Flow<Z> {
return combine(aF, bF, cF, dF, eF, fF) { arr ->
@Suppress("UNCHECKED_CAST")
function(
arr[0] as A,
arr[1] as B,
arr[2] as C,
arr[3] as D,
arr[4] as E,
arr[5] as F
)
}
}
reactormonk
09/18/2024, 6:10 PMJonathan
09/18/2024, 10:30 PM