groupByTo<K, M extends KtMutableMap<K, KtMutableList> > method
M
groupByTo<K, M extends KtMutableMap<K, KtMutableList> >(
- M destination,
- K keySelector(
- T
Groups elements of the original collection by the key returned by the given keySelector
function
applied to each element and puts to the destination
map each group key associated with a list of corresponding elements.
destination
is not type checked by the compiler due to https://github.com/dart-lang/sdk/issues/35518,
but will be checked at runtime.
C
actually is expected to be C extends KtMutableCollection<T>
Implementation
// TODO Change to `M extends KtMutableMap<K, KtMutableList<T>` once https://github.com/dart-lang/sdk/issues/35518 has been fixed
M groupByTo<K, M extends KtMutableMap<K, KtMutableList<dynamic>>>(
M destination, K Function(T) keySelector) {
assert(() {
if (destination is! KtMutableMap<K, KtMutableList<T>> &&
mutableMapFrom<K, KtMutableList<T>>() is! M) {
throw ArgumentError("groupByTo destination has wrong type parameters."
"\nExpected: KtMutableMap<K, KtMutableList<$T>, Actual: ${destination.runtimeType}"
"\ndestination (${destination.runtimeType}) entries aren't subtype of "
"map ($runtimeType) entries. Entries can't be copied to destination."
"\n\n$kBug35518GenericTypeError");
}
return true;
}());
for (final element in iter) {
final key = keySelector(element);
final list = KtMutableMapExtensions(destination)
.getOrPut(key, () => mutableListOf<T>());
list.add(element);
}
return destination;
}