/** * Returns the given iterable's last element or {@code null} if no * element found. * * @param <T> the type of elements in {@code iterable}. * @param iterable the {@link Iterable} to get elements from. * @return the last element in the {@code iterable}, or {@code null} if no * element found. */ public static <T> T lastOrNull( Iterable<T> iterable ) { return Iterators.lastOrNull( iterable.iterator() ); }
/** * Returns the given iterator's last element. If no element is found a * {@link NoSuchElementException} is thrown. * * @param <T> the type of elements in {@code iterator}. * @param iterator the {@link Iterator} to get elements from. * @return the last element in the {@code iterator}. * @throws NoSuchElementException if no element found. */ public static <T> T last( Iterator<T> iterator ) { return assertNotNull( iterator, lastOrNull( iterator ) ); }
@Test void testLastElement() { Object object = new Object(); Object object2 = new Object(); // last Iterable assertEquals( object2, Iterables.last( asList( object, object2 ) ) ); assertEquals( object, Iterables.last( asList( object ) ) ); assertThrows( NoSuchElementException.class, () -> Iterables.last( asList() ) ); // last Iterator assertEquals( object2, Iterators.last( asList( object, object2 ).iterator() ) ); assertEquals( object, Iterators.last( asList( object ).iterator() ) ); assertThrows( NoSuchElementException.class, () -> Iterators.last( asList().iterator() ) ); // lastOrNull Iterable assertEquals( object2, Iterables.lastOrNull( asList( object, object2 ) ) ); assertEquals( object, Iterables.lastOrNull( asList( object ) ) ); assertNull( Iterables.lastOrNull( asList() ) ); // lastOrNull Iterator assertEquals( object2, Iterators.lastOrNull( asList( object, object2 ).iterator() ) ); assertEquals( object, Iterators.lastOrNull( asList( object ).iterator() ) ); assertNull( Iterators.lastOrNull( asList().iterator() ) ); }
/** * Returns the given iterable's last element or {@code null} if no * element found. * * @param <T> the type of elements in {@code iterable}. * @param iterable the {@link Iterable} to get elements from. * @return the last element in the {@code iterable}, or {@code null} if no * element found. */ public static <T> T lastOrNull( Iterable<T> iterable ) { return Iterators.lastOrNull( iterable.iterator() ); }
/** * Returns the given iterator's last element. If no element is found a * {@link NoSuchElementException} is thrown. * * @param <T> the type of elements in {@code iterator}. * @param iterator the {@link Iterator} to get elements from. * @return the last element in the {@code iterator}. * @throws NoSuchElementException if no element found. */ public static <T> T last( Iterator<T> iterator ) { return assertNotNull( iterator, lastOrNull( iterator ) ); }