public static <T, F> Function<F, T> memoize(final Function<F, T> function) {
        return new MemoizeFunction<F, T>() {
            @Override
            public T calc(F arg) {
                return function.apply(arg);
            }
        };
    }
public static < T , F > Function < F , T > memoize ( final Function < F , T > function ) { return new MemoizeFunction < F , T > ( ) { @ Override public T calc ( F arg ) { return function . apply ( arg ) ; } } ; }
/*
Documented, #memoize