code: public final <K> ImmutableMap<K, T> uniqueIndex(Function<? super T, K> keyFunction) {
          return Maps.uniqueIndex(this, keyFunction::apply);
      }
docs: Returns a map with the contents of this {@code FluentIterable} as its {@code values}, indexed
  by keys derived from those values. In other words, each input value produces an entry in the
  map whose key is the result of applying {@code keyFunction} to that value. These entries appear
  in the same order as they appeared in this fluent iterable. Example usage:
  <pre>   {@code
  
  Color red = new Color("red", 255, 0, 0);
  ...
  FluentIterable<Color> allColors = FluentIterable.from(ImmutableSet.of(red, green, blue));
  
  Map<String, Color> colorForName = allColors.uniqueIndex(toStringFunction());
  assertThat(colorForName).containsEntry("red", red);}</pre>
  
  <p>If your index may associate multiple values with each key, use {@link #index(Function)
  index}.