### Question:
Gullectors { public static <T> Collector<T, ?, ImmutableSet<T>> toImmutableSet() { Supplier<ImmutableSet.Builder<T>> supplier = ImmutableSet.Builder::new; BiConsumer<ImmutableSet.Builder<T>, T> accumulator = (b, v) -> b.add(v); BinaryOperator<ImmutableSet.Builder<T>> combiner = (l, r) -> l.addAll(r.build()); Function<ImmutableSet.Builder<T>, ImmutableSet<T>> finisher = ImmutableSet.Builder::build; return Collector.of(supplier, accumulator, combiner, finisher); }  static Collector<T, ?, ImmutableList<T>> toImmutableList(); static Collector<T, ?, ImmutableSet<T>> toImmutableSet(); static Collector<T, ?, ImmutableSortedSet<T>> toNaturalImmutableSortedSet(); static Collector<T, ?, ImmutableMap<K, V>> toImmutableMap(
			Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends V> valueMapper);  }### Answer:
@Test public void testToImmutableSet_Sort() { List<Integer> vals = Arrays.asList(5, 1, 22, 4, 8, 9, 3, 3, 989); ImmutableSet<Integer> res = vals.stream().collect(toImmutableSet()); assertEquals("[5, 1, 22, 4, 8, 9, 3, 989]", res.toString()); }
@Test public void testToImmutableSet_Parallel() { List<Integer> vals = Arrays.asList(5, 1, 22, 4, 8, 9, 3, 3, 989); ImmutableSet<Integer> res = vals.parallelStream().collect(toImmutableSet()); assertEquals("[5, 1, 22, 4, 8, 9, 3, 989]", res.toString()); }
@Test public void testToImmutableSet_Empty() { List<String> vals = Arrays.asList(); ImmutableSet<String> res = vals.stream().collect(toImmutableSet()); assertTrue(res.isEmpty()); }