Метод singleWhere
Метод singleWhere находит в коллекции
единственный элемент, который удовлетворяет
переданному условию. В первый параметр мы передаем
функцию-предикат, которая возвращает true
или false для каждого элемента. Во второй
необязательный параметр можно передать функцию
orElse, которая будет вызвана, если
подходящий элемент не найден. Если в коллекции
окажется больше одного подходящего элемента,
метод выбрасывает исключение StateError.
Синтаксис
iterable.singleWhere(test, [orElse])
Пример
Давайте найдем в списке чисел единственный
элемент, равный 3:
void main()
{
List<int> numbers = [1, 2, 3, 4, 5];
int res = numbers.singleWhere((int num) => num == 3);
print(res);
}
Результат выполнения кода:
3
Пример
Давайте попробуем найти элемент, которого нет в списке. Так как условие не выполнится ни для одного элемента, а второй параметр не передан, метод выбросит исключение:
void main()
{
List<int> numbers = [1, 2, 3, 4, 5];
int res = numbers.singleWhere((int num) => num == 10);
print(res);
}
Результат выполнения кода:
Unhandled exception:
Bad state: No element
Пример
Давайте передадим второй параметр orElse,
чтобы избежать исключения, если элемент
не найден:
void main()
{
List<int> numbers = [1, 2, 3, 4, 5];
int res = numbers.singleWhere(
(int num) => num == 10,
orElse: () => -1
);
print(res);
}
Результат выполнения кода:
-1
Пример
Давайте попробуем найти элемент в списке, где условию удовлетворяют сразу несколько элементов. В таком случае метод выбросит исключение:
void main()
{
List<int> numbers = [1, 2, 2, 3, 4];
int res = numbers.singleWhere((int num) => num == 2);
print(res);
}
Результат выполнения кода:
Unhandled exception:
Bad state: Too many elements
Смотрите также
-
метод
firstWhere,
который возвращает первый подходящий элемент -
метод
lastWhere,
который возвращает последний подходящий элемент -
метод
where,
который возвращает все подходящие элементы -
свойство
single,
которое возвращает единственный элемент коллекции