code: @NotNull
      public static <T> Collector<T, ?, Set<T>> toUnmodifiableSet() {
          return Collectors.collectingAndThen(Collectors.<T>toSet(), new UnaryOperator<Set<T>>() {
  
              @NotNull
              @Override
              public Set<T> apply(@NotNull Set<T> set) {
                  Objects.requireNonNullElements(set);
                  return Collections.unmodifiableSet(set);
              }
          });
      }
docs: Returns a {@code Collector} that fills new unmodifiable {@code Set} with input elements.
  
  The returned {@code Collector} disallows {@code null}s
  and throws {@code NullPointerException} if it is presented with a null value.
  If elements contain duplicates, an arbitrary element of the duplicates is preserved.
  
  @param <T> the type of the input elements
  @return a {@code Collector}
  @since 1.2.0