groupBy<K, V> method

Map<K, List<V>> groupBy<K, V>(
  1. K keySelector(
    1. E element
    ), {
  2. V valueTransform(
    1. E element
    )?,
})

通过keySelector函数定义的键将列表中的元素分组到 map 中。

valueTransform 用于重新设置 map 中的值

举例:

var map = [1, 2, 3, 97, 98, 99].groupBy((n) => n < 10 ? 'smallNumbers' : 'largeNumbers')
// map = {'smallNumbers': [1, 2, 3], 'largeNumbers': [97, 98, 99]}
List<Person> persons = [
    Person(name: 'John', age: 21),
    Person(name: 'Carl', age: 18),
    Person(name: 'Peter', age: 56),
    Person(name: 'Sarah', age: 61)
];
var map = persons.groupBy((p) => p.age < 40 ? 'young' : 'old',
       valueTransform: (p) => p.name);
// map = {'young': ['John', 'Carl'], 'old': ['Peter', 'Sarah']}

Implementation

Map<K, List<V>> groupBy<K, V>(K Function(E element) keySelector, {V Function(E element)? valueTransform}) {
  valueTransform ??= (element) => element as V;
  final map = <K, List<V>>{};
  forEach((element) {
    final key = keySelector(element);
    if (!map.containsKey(key)) {
      map[key] = [];
    }
    map[key]!.add(valueTransform!(element));
  });
  return map;
}