public static <T, E extends Enum<E>> ToEnum<T, E> mapEnum(ToEnum<T, E> expression, UnaryOperator<E> mapper) {
        return new ToEnumMapper<T, E, ToEnum<T, E>, UnaryOperator<E>>(expression, mapper) {
            @Override
            public E apply(T object) {
                return this.mapper.apply(this.inner.apply(object));
            }

            @Override
            public Class<E> enumClass() {
                return this.inner.enumClass();
            }

            @Override
            public MapperType mapperType() {
                return MapperType.ENUM_TO_ENUM;
            }
        };
    }
Returns an expression that first applies the specified expression to get
a value, then applies the specified mapping operation to that value to
get the final result.

@param expression  the expression to apply to the input
@param mapper      the mapper to apply to the result
@param <T>         the input type
@return            the new expression
runtime-parent/runtime-compute/src/main/java/com/speedment/runtime/compute/internal/expression/MapperUtil.java