예제 #1
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);
   }
 }
예제 #2
0
 /**
  * Returns the first element in {@code iterable} or {@code defaultValue} if the iterable is empty.
  * The {@link Iterators} analog to this method is {@link Iterators#getNext}.
  *
  * <p>If no default value is desired (and the caller instead wants a {@link
  * NoSuchElementException} to be thrown), it is recommended that {@code
  * iterable.iterator().next()} is used instead.
  *
  * @param defaultValue the default value to return if the iterable is empty
  * @return the first element of {@code iterable} or the default value
  * @since 7.0
  */
 @Nullable
 public static <T> T getFirst(Iterable<? extends T> iterable, @Nullable T defaultValue) {
   return Iterators.getNext(iterable.iterator(), defaultValue);
 }
예제 #3
0
 /** @since 12.0 */
 @GwtIncompatible("NavigableSet")
 @Override
 public E floor(E e) {
   return Iterators.getNext(headSet(e, true).descendingIterator(), null);
 }