### Question:
Iterables2 { public static <T> Iterable<List<T>> zip(final Iterable<Iterable<T>> iterables, final T defaultValue) { return () -> new ZippingIterator<T>(iterables, defaultValue); } private  Iterables2(); static Iterable<List<T>> zip(final Iterable<Iterable<T>> iterables,
      final T defaultValue); static Iterable<List<T>> zip(T defaultValue, Iterable<T>... iterables);  }### Answer:
@Test @SuppressWarnings("unchecked") public void testZipSingleIterable() { assertValues(Iterables2.zip(0, list(1, 2, 3, 4)), list(1), list(2), list(3), list(4) ); }
@Test @SuppressWarnings("unchecked") public void testZipDefaultValue() { assertValues(Iterables2.zip(10, list(1, 2, 3, 4), list(1)), list(1, 1), list(2, 10), list(3, 10), list(4, 10) ); }
@Test @SuppressWarnings("unchecked") public void testZipNbyN() { assertValues(Iterables2.zip(10, list(1, 2, 3, 4), list(5, 6, 7, 8)), list(1, 5), list(2, 6), list(3, 7), list(4, 8) ); }
@Test @SuppressWarnings("unchecked") public void testZipRemove() { final int DEFAULT = 10; Iterable<List<Integer>> meta = Iterables2.zip(DEFAULT, list(1, 2, 3, 4), list(5, 6, 7, 8), list(9)); Iterables.removeIf(meta, input -> Iterables.contains(input, DEFAULT)); assertValues(meta, list(1, 5, 9)); }