Collections { public static <T> Iterable<T> concat( final Iterable<T> a, final Iterable<T> b ) { assert (a != null); assert (b != null); return () -> Collections.concat(a.iterator(), b.iterator()); } private  Collections(); @SafeVarargs static Set<T> unmodifiableSet(T... values ); static Set<T> unmodifiableSet( Collection<T> values ); static Set<T> unmodifiableSet( Set<T> values ); static Iterable<T> concat( final Iterable<T> a,
                                          final Iterable<T> b ); static Iterator<T> concat( final Iterator<T> a,
                                          final Iterator<T> b );  }
@Test public void shouldConcatenateIterables() throws Exception { Iterable<String> a = Arrays.asList("a", "b", "c"); Iterable<String> b = Arrays.asList("1", "2", "3"); final Iterable<String> concatIterable = Collections.concat(a, b); final Iterator<String> iterator = concatIterable.iterator(); assertThat(iterator, hasItems("a", "b", "c", "1", "2", "3")); }
@Test public void shouldConcatenateIterators() throws Exception { Iterable<String> a = Arrays.asList("a", "b", "c"); Iterable<String> b = Arrays.asList("1", "2", "3"); final Iterator<String> iterator = Collections.concat(a.iterator(), b.iterator()); assertThat(iterator, hasItems("a", "b", "c", "1", "2", "3")); }