code: public static <K, E> Collector<E, ImmutableListMultimap.Builder<K, E>, ImmutableListMultimap<K, E>> index(Function<? super E, K> keyFunction) {
      return index(keyFunction, Function.<E>identity());
    }
docs: Creates an {@link com.google.common.collect.ImmutableListMultimap} from the stream where the values are the values
  in the stream and the keys are the result of the provided {@link Function keyFunction} applied to each value in the
  stream.
  
  <p>
  Neither {@link Function keyFunction} nor {@link Function valueFunction} can return {@code null}, otherwise a
  {@link NullPointerException} will be thrown.
  </p>
  
  @throws NullPointerException if {@code keyFunction} or {@code valueFunction} is {@code null}.
  @throws NullPointerException if result of {@code keyFunction} or {@code valueFunction} is {@code null}.