Future<RawSecureSocket> singleWhere(
bool test(T element)
)

Finds the single element in this stream matching test.

Like lastMatch, except that it is an error if more than one matching element occurs in the stream.

Source

/**
 * Finds the single element in this stream matching [test].
 *
 * Like [lastMatch], except that it is an error if more than one
 * matching element occurs in the stream.
 */
Future<T> singleWhere(bool test(T element)) {
  _Future<T> future = new _Future<T>();
  T result = null;
  bool foundResult = false;
  StreamSubscription subscription;
  subscription = this.listen(
    (T value) {
      _runUserCode(
        () => true == test(value),
        (bool isMatch) {
          if (isMatch) {
            if (foundResult) {
              try {
                throw IterableElementError.tooMany();
              } catch (e, s) {
                _cancelAndErrorWithReplacement(subscription, future, e, s);
              }
              return;
            }
            foundResult = true;
            result = value;
          }
        },
        _cancelAndErrorClosure(subscription, future)
      );
    },
    onError: future._completeError,
    onDone: () {
      if (foundResult) {
        future._complete(result);
        return;
      }
      try {
        throw IterableElementError.noElement();
      } catch (e, s) {
        _completeWithErrorCallback(future, e, s);
      }
    },
    cancelOnError: true);
  return future;
}