@Override
    default ToDoubleNullable<T> mapIfPresent(DoubleUnaryOperator operator) {
        final ToDoubleNullable<T> delegate = this;
        return new ToDoubleNullable<T>() {

            @Override
            public Double apply(T t) {
                return delegate.isNull(t)
                    ? null
                    : operator.applyAsDouble(delegate.applyAsDouble(t));
            }

            @Override
            public ToDouble<T> orElseGet(ToDouble<T> getter) {
                return t -> delegate.isNull(t)
                    ? getter.applyAsDouble(t)
                    : operator.applyAsDouble(delegate.applyAsDouble(t));
            }

            @Override
            public ToDouble<T> orElse(Double value) {
                return t -> delegate.isNull(t) ? value
                    : operator.applyAsDouble(delegate.applyAsDouble(t));
            }

            @Override
            public boolean isNull(T object) {
                return delegate.isNull(object);
            }

            @Override
            public boolean isNotNull(T object) {
                return delegate.isNotNull(object);
            }

            @Override
            public ToDoubleNullable<T> mapIfPresent(DoubleUnaryOperator nextOperator) {
                return delegate.mapIfPresent(operator.andThen(nextOperator));
            }
        };
    }
Returns a typed {@code ToDoubleNullable<T>} using the provided
{@code lambda}.

@param <T> type to extract from
@param lambda to convert
@return a typed {@code ToDoubleNullable<T>} using the provided
{@code lambda}

@throws NullPointerException if the provided {@code lambda} is
{@code null}
runtime-parent/runtime-compute/src/main/java/com/speedment/runtime/compute/ToDoubleNullable.java