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