equals method

  1. @override
bool equals(
  1. Iterable<E>? elements1,
  2. Iterable<E>? elements2
)
inherited

Compare two elements for being equal.

This should be a proper equality relation.

Implementation

@override
bool equals(T? elements1, T? elements2) => switch ((elements1, elements2)) {
  (var e1, var e2) when identical(e1, e2) => true,
  (null, _) || (_, null) => false,
  (T e1, T e2) => () {
    final HashMap<E, int> counts = HashMap<E, int>(
      equals: _elementEquality.equals,
      hashCode: _elementEquality.hash,
      isValidKey: _elementEquality.isValidKey,
    );

    // Count elements in first collection
    int length = 0;
    for (final E e in e1) {
      final int count = counts[e] ?? 0;
      counts[e] = count + 1;
      length++;
    }

    // Check elements in second collection
    for (final E e in e2) {
      final int? count = counts[e];
      if (count == null || count == 0) return false;
      counts[e] = count - 1;
      length--;
    }

    return length == 0;
  }()
};