Traversers { @SafeVarargs public static <T> Traverser<T> traverseItems(T... items) { return traverseArray(items); } 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_traverserOverArgs_then_seeAllItems() { validateTraversal(traverseItems(1, 2)); }
@Test public void when_traverserOverArgsWithNull_then_skipNulls() { Traverser<Integer> trav = traverseItems(1, null, 2); assertEquals(1, (int) trav.next()); assertEquals(2, (int) trav.next()); assertNull(trav.next()); }
@Test public void peek() { List<Integer> list = new ArrayList<>(); Traverser<Integer> t = traverseItems(1, 2, 3).peek(list::add); assertEquals(Integer.valueOf(1), t.next()); assertEquals(Integer.valueOf(2), t.next()); assertEquals(Integer.valueOf(3), t.next()); assertNull(t.next()); assertEquals(Arrays.asList(1, 2, 3), list); }