docs: public static <K, E, V> Collector<E, ImmutableListMultimap.Builder<K, V>, ImmutableListMultimap<K, V>> index(Function<? super E, K> keyFunction,
      Function<? super E, V> valueFunction) {
      verifyKeyAndValueFunctions(keyFunction, valueFunction);
  
      BiConsumer<ImmutableListMultimap.Builder<K, V>, E> accumulator = (map, element) -> {
        K key = requireNonNull(keyFunction.apply(element), KEY_FUNCTION_CANT_RETURN_NULL_MESSAGE);
        V value = requireNonNull(valueFunction.apply(element), VALUE_FUNCTION_CANT_RETURN_NULL_MESSAGE);
  
        map.put(key, value);
      };
      BinaryOperator<ImmutableListMultimap.Builder<K, V>> merger = (m1, m2) -> {
        for (Map.Entry<K, V> entry : m2.build().entries()) {
          m1.put(entry.getKey(), entry.getValue());
        }
        return m1;
      };
      return Collector.of(
        ImmutableListMultimap::builder,
        accumulator,
        merger,
        ImmutableListMultimap.Builder::build);
    }