addIterable<T> method

void addIterable<T>(
  1. Iterable<T> iterable, {
  2. K key(
    1. T
    )?,
  3. V value(
    1. T
    )?,
  4. Iterable<V> values(
    1. T
    )?,
})

As Map.fromIterable but adds.

Additionally, you may specify values instead of value. This new parameter allows you to supply a function that returns an Iterable of values.

key and value default to the identity function. values is ignored if not specified.

Implementation

void addIterable<T>(Iterable<T> iterable,
    {K Function(T)? key,
    V Function(T)? value,
    Iterable<V> Function(T)? values}) {
  if (value != null && values != null) {
    throw ArgumentError('expected value or values to be set, got both');
  }

  key ??= (T x) => x as K;

  if (values != null) {
    for (var element in iterable) {
      addValues(key(element), values(element));
    }
  } else {
    value ??= (T x) => x as V;
    for (var element in iterable) {
      add(key(element), value(element));
    }
  }
}