code: public final <K, V, M extends Multimap<K, V>> M toMultimap(
              final Function<? super T, ? extends K> keyFunction,
              final Function<? super T, ? extends V> valueFunction, final M multimap) {
          Preconditions.checkNotNull(keyFunction);
          Preconditions.checkNotNull(valueFunction);
          Preconditions.checkNotNull(multimap);
          toHandler(new Handler<T>() {
  
              @Override
              public void handle(final T element) {
                  if (element != null) {
                      final K key = keyFunction.apply(element);
                      final V value = valueFunction.apply(element);
                      if (key != null && value != null) {
                          multimap.put(key, value);
                      }
                  }
              }
  
          });
          return multimap;
      }
docs: Terminal operation storing the elements of this Stream in the supplied Multimap as
  {@code <key, value>} pairs computed using the supplied Functions. The supplied key and
  value functions are called for each element, producing the keys and values to store. If a
  null key or value are produced, the element is discarded. Use {@link Functions#identity()}
  in case no transformation is required to extract the key and/or the value.
  
  @param keyFunction
  the key function
  @param valueFunction
  the value function
  @param multimap
  the Multimap where to store the extracted {@code <key, value>} pairs
  @param <K>
  the type of key
  @param <V>
  the type of value
  @param <M>
  the type of Multimap
  @return the supplied Multimap