### Question:
CollectionUtils { public static <T> List<T> join(Collection<T> first, Collection<T> second) { List<T> result = new ArrayList<>(first.size() + second.size()); result.addAll(first); result.addAll(second); return result; }  static T singleValue(Collection<T> values); static List<T> join(Collection<T> first, Collection<T> second); static List<T> minus(Collection<T> first, Collection<T> second); static Set<T> joinToSet(Collection<T> first, Collection<T> second); @SafeVarargs static Set<T> setOf(T... t);  }### Answer:
@Test void testJoin() { { List<Integer> expected = asList(1, 3, 2, 4); List<Integer> l1 = asList(1, 3); List<Integer> l2 = asList(2, 4); assertEquals(expected, join(l1, l2)); assertEquals(new HashSet<>(expected), joinToSet(l1, l2)); } { List<Integer> expected = asList(1, 4); List<Integer> l1 = emptyList(); List<Integer> l2 = asList(1, 4); assertEquals(expected, join(l1, l2)); assertEquals(new HashSet<>(expected), joinToSet(l1, l2)); } }