singleWhere 方法

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

    满足条件的单个元素。

    检查元素,以查看 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();
    }