singleWhere 方法

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

    满足 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 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;
    }