code: @NotNull
      public <K> Stream<Map.Entry<K, List<T>>> groupBy(
              @NotNull final Function<? super T, ? extends K> classifier) {
          Map<K, List<T>> map = collect(Collectors.<T, K>groupingBy(classifier));
          return new Stream<Map.Entry<K, List<T>>>(params, map.entrySet());
      }
docs: Partitions {@code Stream} into {@code Map} entries according to the given classifier function.
  
  <p>This is a stateful intermediate operation.
  
  <p>Example:
  <pre>
  classifier: (str) -&gt; str.length()
  stream: ["a", "bc", "d", "ef", "ghij"]
  result: [{1: ["a", "d"]}, {2: ["bc", "ef"]}, {4: ["ghij"]}]
  </pre>
  
  @param <K> the type of the keys, which are result of the classifier function
  @param classifier  the classifier function
  @return the new stream