android/guava/src/com/google/common/collect/Iterables.java
@NullableDecl
  public static <T> T get(
      Iterable<? extends T> iterable, int position, @NullableDecl T defaultValue) {
    checkNotNull(iterable);
    Iterators.checkNonnegative(position);
    if (iterable instanceof List) {
      List<? extends T> list = Lists.cast(iterable);
      return (position < list.size()) ? list.get(position) : defaultValue;
    } else {
      Iterator<? extends T> iterator = iterable.iterator();
      Iterators.advance(iterator, position);
      return Iterators.getNext(iterator, defaultValue);
    }
  }
@NullableDecl
  public static <T> T get(
      Iterable<? extends T> iterable, int position, @NullableDecl T defaultValue) {
    checkNotNull(iterable);
    Iterators.checkNonnegative(position);
    if (iterable instanceof List) {
      List<? extends T> list = Lists.cast(iterable);
      return (position < list.size()) ? list.get(position) : defaultValue;
    } else {
      Iterator<? extends T> iterator = iterable.iterator();
      Iterators.advance(iterator, position);
      return Iterators.getNext(iterator, defaultValue);
    }
  }
@ NullableDecl public static < T > T get ( Iterable < ? extends T > iterable , int position , @ NullableDecl T defaultValue ) { checkNotNull ( iterable ) ; Iterators . checkNonnegative ( position ) ; if ( iterable instanceof List ) { List < ? extends T > list = Lists . cast ( iterable ) ; return ( position < list . size ( ) ) ? list . get ( position ) : defaultValue ; } else { Iterator < ? extends T > iterator = iterable . iterator ( ) ; Iterators . advance ( iterator , position ) ; return Iterators . getNext ( iterator , defaultValue ) ; } }
Returns the element at the specified position in an iterable or a default value otherwise.

<p><b>{@code Stream} equivalent:</b> {@code
stream.skip(position).findFirst().orElse(defaultValue)} (returns the default value if the index
is out of bounds)

@param position position of the element to return
@param defaultValue the default value to return if {@code position} is greater than or equal to
the size of the iterable
@return the element at the specified position in {@code iterable} or {@code defaultValue} if
{@code iterable} contains fewer than {@code position + 1} elements.
@throws IndexOutOfBoundsException if {@code position} is negative
@since 4.0
Returns the element at the specified position in an iterable or a default value otherwise .