public MapStream<K, V> distinctKeys(BinaryOperator<V> merger) {
        requireNonNull(merger);
        final boolean parallel = isParallel();
        final Map<K, V> result = parallel
            ? Collections.synchronizedMap(new LinkedHashMap<>())
            : new LinkedHashMap<>();
        
        inner.forEachOrdered(e ->
            result.compute(e.getKey(), (k, v) -> 
                v == null 
                    ? e.getValue()
                    : merger.apply(e.getValue(), v)
            ));
        
        return MapStream.of(result, parallel);
    }
Returns a stream consisting of the distinct elements (according to
{@link Object#equals(Object)}) of this stream based on the key only. If 
the same key is encountered multiple times, the specified value merger 
will be used to determine which value can pass.
<p>
This operation will consume the wrapped stream and produce a new one. The
complexity of this operation is therefore O(n).
<p>
This is a stateful intermediate operation.

@param merger  the merging operation to use
@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