mergeListsSetsOrQueues function

Iterable mergeListsSetsOrQueues(
  1. Iterable a,
  2. Iterable b, [
  3. dynamic elseFilter(
    1. dynamic
    )?
])

Merges two iterable structures. The result does not share any mutable substructure with either input — items are deep-copied where applicable.

Implementation

Iterable<dynamic> mergeListsSetsOrQueues(
  Iterable<dynamic> a,
  Iterable<dynamic> b, [
  dynamic Function(dynamic)? elseFilter,
]) {
  if (a is Set) {
    final a1 = <dynamic>{
      for (final e in a.nonNulls.cast<dynamic>()) _deepCopy(e),
    };
    final b1 = elseFilter != null
        ? b.nonNulls.cast<dynamic>().map(elseFilter)
        : b.nonNulls.cast<dynamic>().map<dynamic>(_deepCopy);
    return a1..addAll(b1);
  } else if (a is Queue) {
    final a1 = a.nonNulls;
    final b1 = b.nonNulls;
    final mergedList = _performElementWiseMerge(a1, b1, elseFilter);
    return Queue<dynamic>.of(mergedList);
  } else {
    final a1 = a.nonNulls;
    final b1 = b.nonNulls;
    return _performElementWiseMerge(a1, b1, elseFilter);
  }
}