public <R> MapStream<R, V> mapKey(BiFunction<? super K, ? super V, ? extends R> mapper) {
        requireNonNull(mapper);
        return new MapStream<>(inner.map(e
            -> new AbstractMap.SimpleEntry<>(
                mapper.apply(e.getKey(), e.getValue()),
                e.getValue()
            )
        ));
    }
Returns a stream consisting of the results of applying the given
function to the key-component of this stream.
<p>
This is an intermediate operation.

@param <R>     the element type of the new stream
@param mapper  a non-interfering, stateless function to apply to each 
               key in the stream
@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