android/guava/src/com/google/common/collect/Iterators.java
@NullableDecl
  public static <T> T find(
      Iterator<? extends T> iterator,
      Predicate<? super T> predicate,
      @NullableDecl T defaultValue) {
    checkNotNull(iterator);
    checkNotNull(predicate);
    while (iterator.hasNext()) {
      T t = iterator.next();
      if (predicate.apply(t)) {
        return t;
      }
    }
    return defaultValue;
  }
@NullableDecl
  public static <T> T find(
      Iterator<? extends T> iterator,
      Predicate<? super T> predicate,
      @NullableDecl T defaultValue) {
    checkNotNull(iterator);
    checkNotNull(predicate);
    while (iterator.hasNext()) {
      T t = iterator.next();
      if (predicate.apply(t)) {
        return t;
      }
    }
    return defaultValue;
  }
Returns the first element in {@code iterator} that satisfies the given predicate. If no such
element is found, {@code defaultValue} will be returned from this method and the iterator will
be left exhausted: its {@code hasNext()} method will return {@code false}. Note that this can
usually be handled more naturally using {@code tryFind(iterator, predicate).or(defaultValue)}.

@since 7.0