singleWhere method

  1. @override
E singleWhere(
  1. bool test(
    1. E element
    ), {
  2. E orElse()?,
})
override

The single element that satisfies test.

Checks elements to see if test(element) returns true. If exactly one element satisfies test, that element is returned. If more than one matching element is found, throws StateError. If no matching element is found, returns the result of orElse. If orElse is omitted, it defaults to throwing a StateError.

Example:

final numbers = <int>[2, 2, 10];
var result = numbers.singleWhere((element) => element > 5); // 10

When no matching element is found, the result of calling orElse is returned instead.

result = numbers.singleWhere((element) => element == 1,
    orElse: () => -1); // -1

There must not be more than one matching element.

result = numbers.singleWhere((element) => element == 2); // Throws Error.

Implementation

@override
E singleWhere(bool Function(E element) test, {E Function()? orElse}) {
  late E result;
  var match = false;
  for (var i = 0; i < length; i++) {
    final element = elementAt(i);
    if (test(element)) {
      if (match) {
        throw _moreThanOneElement();
      }
      result = element;
      match = true;
    }
  }
  if (!match) {
    if (orElse != null) {
      return orElse();
    }
    throw _noElements();
  }
  return result;
}