@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;
  }
@ 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
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 ) } .