singleWhere 方法

E singleWhere(
  1. bool test(
    1. E value
    ),
  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 value), {E Function()? 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;
    }