public static <K, V> Map<K, V> toInvertedMap(Iterator<? extends K> keys, Function1<? super K, V> computeValues) {
		Map<K, V> result = Maps.newLinkedHashMap();
		while(keys.hasNext()) {
			K k = keys.next();
			result.put(k, computeValues.apply(k));
		}
		return result;
	}
public static < K , V > Map < K , V > toInvertedMap ( Iterator < ? extends K > keys , Function1 < ? super K , V > computeValues ) { Map < K , V > result = Maps . newLinkedHashMap ( ) ; while ( keys . hasNext ( ) ) { K k = keys . next ( ) ; result . put ( k , computeValues . apply ( k ) ) ; } return result ; }
Returns a map for which the {@link Map#values} are computed by the given function, and each key is an element in
the given {@code keys}. If the iterator contains equal keys more than once, the last one will be contained in the
map. The map is computed eagerly. That is, subsequent changes in the keys are not reflected by the map.
The key iterator is left exhausted.

@param keys
the keys to use when constructing the {@code Map}. May not be <code>null</code>.
@param computeValues
the function used to produce the values for each key. May not be <code>null</code>.
@return a map mapping each entry in the given iterator to the corresponding result when evaluating the function
{@code computeValues}.