code: @NotNull
      public static <T, K, V> Collector<T, ?, Map<K, V>> toUnmodifiableMap(
              @NotNull final Function<? super T, ? extends K> keyMapper,
              @NotNull final Function<? super T, ? extends V> valueMapper) {
          return Collectors.collectingAndThen(
                  Collectors.<T, K, V>toMap(keyMapper, valueMapper),
                  Collectors.<K, V>toUnmodifiableMapConverter());
      }
docs: Returns a {@code Collector} that fills new unmodifiable {@code Map} with input elements.
  
  The returned {@code Collector} disallows {@code null} keys and values.
  If the mapped keys contain duplicates, an {@code IllegalStateException} is thrown,
  see {@link #toUnmodifiableMap(Function, Function, BinaryOperator)}.
  
  @param <T> the type of the input elements
  @param <K> the result type of key mapping function
  @param <V> the result type of value mapping function
  @param keyMapper  a mapping function to produce keys
  @param valueMapper  a mapping function to produce values
  @return a {@code Collector}
  @see #toUnmodifiableMap(Function, Function, BinaryOperator)
  @since 1.2.0