description

# singleWhere method

E singleWhere(

1. bool test(
   1. E element
   ), {
2. E orElse()?,

})

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

    E singleWhere(bool test(E element), {E orElse()?}) {
      var iterator = this.iterator;
      E result;
      do {
        if (!iterator.moveNext()) {
          if (orElse != null) return orElse();
          throw IterableElementError.noElement();
        }
        result = iterator.current;
      } while (!test(result));
      while (iterator.moveNext()) {
        if (test(iterator.current)) throw IterableElementError.tooMany();
      }
      return result;
    }