code: public static <T, K, V> Collector<T, ?, ImmutableMap<K, V>> toImmutableMap(
        Function<? super T, ? extends K> keyFunction,
        Function<? super T, ? extends V> valueFunction,
        BinaryOperator<V> mergeFunction) {
      checkNotNull(keyFunction);
      checkNotNull(valueFunction);
      checkNotNull(mergeFunction);
      return Collectors.collectingAndThen(
          Collectors.toMap(keyFunction, valueFunction, mergeFunction, LinkedHashMap::new),
          ImmutableMap::copyOf);
    }
docs: Returns a {@link Collector} that accumulates elements into an {@code ImmutableMap} whose keys
  and values are the result of applying the provided mapping functions to the input elements.
  
  <p>If the mapped keys contain duplicates (according to {@link Object#equals(Object)}), the
  values are merged using the specified merging function. Entries will appear in the encounter
  order of the first occurrence of the key.
  
  @since 21.0