aggregateTo<R> method
For each group the operation
is applied to the elements of that group
sequentially.
The previous accumulated value is passed and the current element. The
result per group is stored in the given destination
map.
The key for each element is provided by the [](T element)
operator.
final numbers = [3, 4, 5, 6, 7, 8, 9];
final aggregated = numbers
.groupingBy((value) => value % 3)
.aggregateTo({}, (key, accumulator, element, first) {
return first ? '$key:$element' : '$accumulator-$element';
});
print(aggregated.values); // (0:3-6-9, 1:4-7, 2:5-8)
If the destination
map already has a value corresponding to a key,
then the elements that are being aggregated for that key will never be
considered as first
.
Implementation
Map<K, R> aggregateTo<R>(
Map<K, R> destination,
AggregateOperation<T, K, R> operation,
) {
final it = sourceIterator;
while (it.moveNext()) {
final key = this[it.current]!;
destination[key] = operation(
key,
destination[key],
it.current,
destination[key] == null,
);
}
return destination;
}