public <K2> MapStream<K2, List<V>> groupingBy(Function<V, K2> grouper) {
        requireNonNull(grouper);
        return inner.map(Map.Entry::getValue)
            .collect(CollectorUtil.groupBy(grouper));
    }
Returns a new {@code MapStream} where the key component is calculated by
applying the specified grouper function to the values of this stream and
the value is a stream consisting of all the entries that produced the
same key.
<p>
This is a stateful intermediate operation.

@param <K2>     the type of the new key
@param grouper  the function to use for grouping entries
@return         the new stream
@throws NullPointerException if any of the provided parameters are {@code null}
common-parent/mapstream/src/main/java/com/speedment/common/mapstream/MapStream.java