Spec-Zone.ru › Dart 2

dart:collection

метод singleWhere

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

Возвращает единственный элемент, удовлетворяющий test.

Проверяет элементы, чтобы выяснить, возвращает ли test(element) значение true. Если test удовлетворяет ровно один элемент, возвращается этот элемент. Если найдено несколько подходящих элементов, выбрасывается исключение StateError. Если подходящих элементов не найдено, возвращается результат orElse. Если orElse не указано, по умолчанию выбрасывается исключение StateError.

Пример:

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

Если подходящий элемент не найден, вместо него возвращается результат вызова orElse.

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

Подходящий элемент должен быть не более чем один.

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

Реализация

E singleWhere(bool test(E element), {E Function()? orElse}) {
  int length = this.length;
  late E match;
  bool matchFound = false;
  for (int i = 0; i < length; i++) {
    E element = this[i];
    if (test(element)) {
      if (matchFound) {
        throw IterableElementError.tooMany();
      }
      matchFound = true;
      match = element;
    }
    if (length != this.length) {
      throw ConcurrentModificationError(this);
    }
  }
  if (matchFound) return match;
  if (orElse != null) return orElse();
  throw IterableElementError.noElement();
}

© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.19.6/dart-collection/ListMixin/singleWhere.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API