/** * Returns the given iterator's first 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 first element in the {@code iterator}. * @throws NoSuchElementException if no element found. */ public static <T> T first( Iterator<T> iterator ) { return assertNotNull( iterator, firstOrNull( iterator ) ); }
/** * Returns the given iterable's first element or {@code null} if no * element found. * * If the {@link Iterable#iterator() iterator} created by the {@code iterable} implements {@link Resource} * it will be {@link Resource#close() closed} in a {@code finally} block after the single item * has been retrieved, or failed to be retrieved. * * @param <T> the type of elements in {@code iterable}. * @param iterable the {@link Iterable} to get elements from. * @return the first element in the {@code iterable}, or {@code null} if no * element found. */ public static <T> T firstOrNull( Iterable<T> iterable ) { Iterator<T> iterator = iterable.iterator(); try { return Iterators.firstOrNull( iterator ); } finally { if ( iterator instanceof Resource ) { ((Resource) iterator).close(); } } }
@Override public WeightedPath findSinglePath( Node start, Node end ) { return firstOrNull( new TopFetchingWeightedPathIterator( traverser( start, end, PathInterestFactory.single( epsilon ) ).iterator(), costEvaluator ) ); }
@Override public WeightedPath findSinglePath( Node start, Node end ) { return firstOrNull( new WeightedPathIterator( traverser( start, end, single( epsilon ) ).iterator(), costEvaluator, epsilon, interest ) ); }
@Test void testFirstElement() { Object object = new Object(); Object object2 = new Object(); // first Iterable assertEquals( object, Iterables.first( asList( object, object2 ) ) ); assertEquals( object, Iterables.first( asList( object ) ) ); assertThrows( NoSuchElementException.class, () -> Iterables.first( asList() ) ); // first Iterator assertEquals( object, Iterators.first( asList( object, object2 ).iterator() ) ); assertEquals( object, Iterators.first( asList( object ).iterator() ) ); assertThrows( NoSuchElementException.class, () -> Iterators.first( asList().iterator() ) ); // firstOrNull Iterable assertEquals( object, Iterables.firstOrNull( asList( object, object2 ) ) ); assertEquals( object, Iterables.firstOrNull( asList( object ) ) ); assertNull( Iterables.firstOrNull( asList() ) ); // firstOrNull Iterator assertEquals( object, Iterators.firstOrNull( asList( object, object2 ).iterator() ) ); assertEquals( object, Iterators.firstOrNull( asList( object ).iterator() ) ); assertNull( Iterators.firstOrNull( asList().iterator() ) ); }
/** * Returns the given iterator's first 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 first element in the {@code iterator}. * @throws NoSuchElementException if no element found. */ public static <T> T first( Iterator<T> iterator ) { return assertNotNull( iterator, firstOrNull( iterator ) ); }
/** * Returns the given iterable's first element or {@code null} if no * element found. * * If the {@link Iterable#iterator() iterator} created by the {@code iterable} implements {@link Resource} * it will be {@link Resource#close() closed} in a {@code finally} block after the single item * has been retrieved, or failed to be retrieved. * * @param <T> the type of elements in {@code iterable}. * @param iterable the {@link Iterable} to get elements from. * @return the first element in the {@code iterable}, or {@code null} if no * element found. */ public static <T> T firstOrNull( Iterable<T> iterable ) { Iterator<T> iterator = iterable.iterator(); try { return Iterators.firstOrNull( iterator ); } finally { if ( iterator instanceof Resource ) { ((Resource) iterator).close(); } } }
@Override public WeightedPath findSinglePath( Node start, Node end ) { return firstOrNull( new WeightedPathIterator( traverser( start, end, single( epsilon ) ).iterator(), costEvaluator, epsilon, interest ) ); }
@Override public WeightedPath findSinglePath( Node start, Node end ) { return firstOrNull( new TopFetchingWeightedPathIterator( traverser( start, end, PathInterestFactory.single( epsilon ) ).iterator(), costEvaluator ) ); }