More a standard-library issue than a language issu...
# language-proposals
d
More a standard-library issue than a language issue, but I've recently found myself missing these:
Copy code
inline fun <T, K> Sequence<T>.groupByAndReduce(keySelector: (T) -> K, crossinline reducer: (T, T) -> T): Map<K, T> =
        groupByAndReduceTo(LinkedHashMap(), keySelector, reducer)

inline fun <T, K, M : MutableMap<in K, T>> Sequence<T>.groupByAndReduceTo(destination: M, keySelector: (T) -> K, crossinline reducer: (T, T) -> T): M {
    for (element in this) {
        val k = keySelector(element)
        destination.compute(k) { _, v -> if (v == null) element else reducer(v, element) }
    }
    return destination
}

inline fun <T, A, K> Sequence<T>.groupByAndFold(keySelector: (T) -> K, seedValue: A, crossinline folder: (A, T) -> A): Map<K, A> =
        groupByAndFoldTo(LinkedHashMap(), keySelector, seedValue, folder)

inline fun <T, A, K, M : MutableMap<in K, A>> Sequence<T>.groupByAndFoldTo(destination: M, keySelector: (T) -> K, seedValue: A, crossinline folder: (A, T) -> A): M {
    for (element in this) {
        val k = keySelector(element)
        destination.compute(k) { _, v -> folder(v ?: seedValue, element) }
    }
    return destination
}
o
#stdlib
d
Ah, that is exactly what is required, thank you!