singleWhere method - Iterable class - dart:core library (original) (raw)
E singleWhere(
- bool test(
- E element
), {
- E element
- 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;
}