As of 7/26/2012, Guava master contains two new ways to do this. They should be in release 14.0.
Maps.asMap(Set<K>, Function<? super K, V>) (and two overloads for
NavigableSet) allows you to view a
Set plus a
Function as a
Map where the value for each key in the set is the result of applying the function to that key. The result is a view, so it doesn't copy the input set and the
Map result will change as the set does and vice versa.
Maps.toMap(Iterable<K>, Function<? super K, V>) takes an
Iterable and eagerly converts it to an
ImmutableMap where the distinct elements of the iterable are the keys and the values are the results of applying the function to each key.