code: public static <K1, K2, V> ImmutableMap<K2, V> copyWithKeysTransformedByInjection(
        final Map<K1, V> map, final Function<? super K1, K2> injection) {
      final ImmutableMap.Builder<K2, V> ret = ImmutableMap.builder();
      for (final Map.Entry<K1, V> entry : map.entrySet()) {
        ret.put(injection.apply(entry.getKey()), entry.getValue());
      }
      return ret.build();
    }
docs: Creates a copy of the supplied map with its keys transformed by the supplied function, which
  must be one-to-one on the keys of the original map. If two keys are mapped to the same value by
  {@code injection}, an {@code IllegalArgumentException} is thrown.