Example #1
0
  /**
   * Returns the last element of {@code iterable} or {@code defaultValue} if the iterable is empty.
   *
   * @param defaultValue the value to return if {@code iterable} is empty
   * @return the last element of {@code iterable} or the default value
   * @since 3.0
   */
  @Nullable
  public static <T> T getLast(Iterable<? extends T> iterable, @Nullable T defaultValue) {
    if (iterable instanceof Collection) {
      Collection<? extends T> c = Collections2.cast(iterable);
      if (c.isEmpty()) {
        return defaultValue;
      } else if (iterable instanceof List) {
        return getLastInNonemptyList(Lists.cast(iterable));
      }
    }

    return Iterators.getLast(iterable.iterator(), defaultValue);
  }
Example #2
0
 /**
  * Returns the element at the specified position in an iterable or a default value otherwise.
  *
  * @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
  */
 @Nullable
 public static <T> T get(Iterable<? extends T> iterable, int position, @Nullable 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);
   }
 }