diff --git a/flat.go b/flat.go index 9d112f8..5ce1f25 100644 --- a/flat.go +++ b/flat.go @@ -15,6 +15,21 @@ func FlatSlice[T any](source <-chan []T) <-chan T { return out } +func FlatMap[K comparable, V, T any](source <-chan map[K]V, unmapper func(key K, value V) T) <-chan T { + out := make(chan T, cap(source)) + + go func() { + defer close(out) + for slice := range source { + for k, v := range slice { + out <- unmapper(k, v) + } + } + }() + + return out +} + func FlatChan[T any](source <-chan <-chan T) <-chan T { out := make(chan T, cap(source))