singleWhere method
- bool test(
- E element
- 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;
}