code: @NotNull
      public static <T, K, A, D> Collector<T, ?, Map<K, D>> groupingBy(
              @NotNull Function<? super T, ? extends K> classifier,
              @NotNull Collector<? super T, A, D> downstream) {
          return Collectors.<T, K, D, A, Map<K, D>>groupingBy(classifier,
                  Collectors.<K, D>hashMapSupplier(), downstream);
      }
docs: Returns a {@code Collector} that performs grouping operation by given classifier.
  
  @param <T> the type of the input elements
  @param <K> the type of the keys
  @param <A> the accumulation type
  @param <D> the result type of downstream reduction
  @param classifier  the classifier function
  @param downstream  the collector of mapped elements
  @return a {@code Collector}
  @see #groupingBy(com.annimon.stream.function.Function)
  @see #groupingBy(com.annimon.stream.function.Function, com.annimon.stream.function.Supplier, com.annimon.stream.Collector)