docs: public static <K, V, E> Map<K, V> transformCollectionToMap(Collection<? extends E> input, MapMakerFunction<K, V, ? super E> f) {
        // This screams for a map function! Gimme functional programming pleasee...
        if (input.isEmpty()) return Collections.emptyMap();
        if (input.size() == 1) {
           E single = input.iterator().next();
           Map.Entry<K, V> entry = f.transform(single);
           return singletonMap(entry.getKey(), entry.getValue());
        } else {
           Map<K, V> map = new HashMap<>(input.size());
           for (E e : input) {
              Map.Entry<K, V> entry = f.transform(e);
              map.put(entry.getKey(), entry.getValue());
           }
           return unmodifiableMap(map);
        }
     }