@Override
    public <U> U reduce(U identity, BiFunction<U, ? super Map.Entry<K, V>, U> accumulator, BinaryOperator<U> combiner) {
        // identity is nullable
        requireNonNull(accumulator);
        requireNonNull(combiner);
        return inner.reduce(identity, accumulator, combiner);
    }
Performs a reduction on the elements of this stream, using the provided 
identity, accumulation and combining functions.  This is equivalent to:
<pre>{@code
    U result = identity;
    for (T element : this stream)
        result = accumulator.apply(result, element)
    return result;
}</pre>

but is not constrained to execute sequentially.
<p>
The {@code identity} value must be an identity for the combiner
function.  This means that for all {@code u}, {@code combiner(identity, u)}
is equal to {@code u}.  Additionally, the {@code combiner} function
must be compatible with the {@code accumulator} function; for all
{@code u} and {@code t}, the following must hold:
<pre>{@code
    combiner.apply(u, accumulator.apply(identity, t)) == accumulator.apply(u, t)
}</pre>
<p>
This is a terminal operation.

<p> Many reductions using this form can be represented more simply
by an explicit combination of {@code map} and {@code reduce} operations.
The {@code accumulator} function acts as a fused mapper and accumulator,
which can sometimes be more efficient than separate mapping and reduction,
such as when knowing the previously reduced value allows you to avoid
some computation.

@param <U>          the type of the result
@param identity     the identity value for the combiner function
@param accumulator  an associative, non-interfering, stateless function 
                    for incorporating an additional element into a result
@param combiner     an associative, non-interfering, stateless
                    function for combining two values, which must be
                    compatible with the accumulator function
@return             the result of the reduction
@throws NullPointerException if any of the provided parameters are {@code null}

@see #reduce(BinaryOperator)
common-parent/mapstream/src/main/java/com/speedment/common/mapstream/MapStream.java