retainWhere method

  1. @override
void retainWhere(
  1. bool test(
    1. E element
    )
)
override

Removes all elements of this set that fail to satisfy test.

final characters = <String>{'A', 'B', 'C'};
characters.retainWhere(
    (element) => element.startsWith('B') || element.startsWith('C'));
print(characters); // {B, C}

Implementation

@override
void retainWhere(bool Function(E element) test) {
  final removed = <E>[];
  for (var i = _value.length - 1; i >= 0; --i) {
    final element = _value.elementAt(i);
    if (!test(element)) {
      removed.add(element);
    }
  }
  if (removed.isNotEmpty) {
    _setPreviousValue(Set<E>.of(_value));
    for (final item in removed) {
      _value.remove(item);
    }
  }
}