code: public <M extends Map<K, List<V>>> M grouping(Supplier<M> mapSupplier) {
          return grouping(mapSupplier, Collectors.toList());
      }
docs: Returns a {@link Map} where elements of this stream with the same key are
  grouped together. The resulting {@code Map} keys are the keys of this
  stream entries and the values are the lists of the corresponding values.
  The {@code Map} is created using the provided supplier function.
  
  <p>
  There are no guarantees on the type, mutability, serializability, or
  thread-safety of the {@code List} objects returned. If more control over
  the lists required, use {@link #groupingTo(Supplier)}.
  
  <p>
  This is a <a href="package-summary.html#StreamOps">terminal</a>
  operation.
  
  @param <M> the type of the resulting {@code Map}
  @param mapSupplier a function which returns a new, empty {@code Map} into
  which the results will be inserted
  @return a {@code Map} containing the elements of this stream
  @see #grouping(Supplier, Collector)
  @see #groupingTo(Supplier, Supplier)