guava/src/com/google/common/collect/Iterables.java
public static <T> @Nullable T find(
      Iterable<? extends T> iterable, Predicate<? super T> predicate, @Nullable T defaultValue) {
    return Iterators.find(iterable.iterator(), predicate, defaultValue);
  }
public static <T> @Nullable T find(
      Iterable<? extends T> iterable, Predicate<? super T> predicate, @Nullable T defaultValue) {
    return Iterators.find(iterable.iterator(), predicate, defaultValue);
  }
public static < T > @ Nullable T find ( Iterable < ? extends T > iterable , Predicate < ? super T > predicate , @ Nullable T defaultValue ) { return Iterators . find ( iterable . iterator ( ) , predicate , defaultValue ) ; }
Returns the first element in {@code iterable} that satisfies the given predicate, or {@code
defaultValue} if none found. Note that this can usually be handled more naturally using {@code
tryFind(iterable, predicate).or(defaultValue)}.

<p><b>{@code Stream} equivalent:</b> {@code
stream.filter(predicate).findFirst().orElse(defaultValue)}

@since 7.0
Returns the first element in { @code iterable } that satisfies the given predicate or { @code defaultValue } if none found . Note that this can usually be handled more naturally using { @code tryFind ( iterable predicate ) . or ( defaultValue ) } .