@Override
    public MapStream<K, V> peek(Consumer<? super Map.Entry<K, V>> action) {
        inner = inner.peek(requireNonNull(action));
        return this;
    }
Returns a stream consisting of the elements of this stream, additionally
performing the provided action on each element as elements are consumed
from the resulting stream.
<p>
This is an intermediate operation.
<p>
For parallel stream pipelines, the action may be called at
whatever time and in whatever thread the element is made available by the
upstream operation.  If the action modifies shared state,
it is responsible for providing the required synchronization.

<p> This method exists mainly to support debugging, where you want
to see the elements as they flow past a certain point in a pipeline:
<pre>{@code
    Stream.of("one", "two", "three", "four")
        .filter(e -> e.length() > 3)
        .peek(e -> System.out.println("Filtered value: " + e))
        .map(String::toUpperCase)
        .peek(e -> System.out.println("Mapped value: " + e))
        .collect(Collectors.toList());
}</pre>

@param action  a non-interfering action to perform on the elements as
               they are consumed from 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