mirror of
https://github.com/InsanusMokrassar/MicroUtils.git
synced 2024-11-22 16:23:50 +00:00
flows extensions
This commit is contained in:
parent
dbfbeef90a
commit
b7934cf357
@ -2,6 +2,9 @@
|
||||
|
||||
## 0.12.15
|
||||
|
||||
* `Coroutines`:
|
||||
* Add `Flow` extensions `flatMap` and `flatten`
|
||||
|
||||
## 0.12.14
|
||||
|
||||
* `Versions`:
|
||||
|
@ -0,0 +1,31 @@
|
||||
package dev.inmo.micro_utils.coroutines
|
||||
|
||||
import kotlinx.coroutines.flow.*
|
||||
|
||||
inline fun <T, R> Flow<Flow<T>>.flatMap(
|
||||
crossinline mapper: suspend (T) -> R
|
||||
) = flow {
|
||||
collect {
|
||||
it.collect {
|
||||
emit(mapper(it))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
inline fun <T, R> Flow<Iterable<T>>.flatMap(
|
||||
crossinline mapper: suspend (T) -> R
|
||||
) = map {
|
||||
it.asFlow()
|
||||
}.flatMap(mapper)
|
||||
|
||||
inline fun <T, R> Flow<Flow<T>>.flatMapNotNull(
|
||||
crossinline mapper: suspend (T) -> R
|
||||
) = flatMap(mapper).filterNot { it == null }
|
||||
|
||||
inline fun <T, R> Flow<Iterable<T>>.flatMapNotNull(
|
||||
crossinline mapper: suspend (T) -> R
|
||||
) = flatMap(mapper).filterNot { it == null }
|
||||
|
||||
fun <T> Flow<Iterable<T>>.flatten() = flatMap { it }
|
||||
|
||||
fun <T> Flow<Flow<T>>.flatten() = flatMap { it }
|
Loading…
Reference in New Issue
Block a user