code: public static <K, V> ImmutableListMultimap<K, V> indexToListMultimapWithMultipleKeys(
        Iterable<? extends V> values, Function<? super V, ? extends Collection<? extends K>> keyFunction) {
      final ImmutableListMultimap.Builder<K,V> ret = ImmutableListMultimap.builder();
  
      for (final V value : values) {
        // nulls banned by contract
        //noinspection ConstantConditions
        for (K key : keyFunction.apply(value)) {
          ret.put(key, value);
        }
      }
  
      return ret.build();
    }
docs: Exactly like {@link Multimaps#index(Iterable, Function)}, except the key function can
  provide multiple keys for a given value.  The {@code keyFunction} may never return
  {@code null} or a collection containing {@code null}.