Traversers { @Nonnull public static <T> Traverser<T> traverseIterable(@Nonnull Iterable<? extends T> iterable) { return traverseIterator(iterable.iterator()); } private  Traversers(); @SuppressWarnings("unchecked") @Nonnull static Traverser<T> empty(); @Nonnull static Traverser<T> singleton(@Nonnull T item); @Nonnull static Traverser<T> traverseIterator(@Nonnull Iterator<? extends T> iterator); @Nonnull static Traverser<T> traverseIterator(@Nonnull Iterator<? extends T> iterator, boolean ignoreNulls); @Nonnull static Traverser<T> traverseSpliterator(@Nonnull Spliterator<T> spliterator); @Nonnull static Traverser<T> traverseEnumeration(@Nonnull Enumeration<T> enumeration); @Nonnull static Traverser<T> traverseStream(@Nonnull Stream<T> stream); @Nonnull static Traverser<T> traverseIterable(@Nonnull Iterable<? extends T> iterable); @Nonnull static Traverser<T> traverseArray(@Nonnull T[] array); @SafeVarargs static Traverser<T> traverseItems(T... items); @Nonnull static Traverser<T> lazy(@Nonnull Supplier<Traverser<T>> supplierOfTraverser);  }
@Test public void when_traverseIterable_then_seeAllItems() { validateTraversal(traverseIterable(asList(1, 2))); }
@Test(expected = NullPointerException.class) public void when_traverseIterableWithNull_then_failure() { Traverser<Integer> trav = traverseIterable(asList(1, null)); trav.next(); trav.next(); }