@@ -0,0 +1,621 @@
+package org.xander.behavioral.lazyevaluation;%0A%0Aimport java.util.HashMap;%0Aimport java.util.Map;%0Aimport java.util.function.BiFunction;%0Aimport java.util.function.Function;%0A%0Apublic class Memoizer %7B%0A    public static %3CT, R%3E R callMemoized(final BiFunction%3CFunction%3CT, R%3E, T, R%3E function, final T input) %7B%0A        Function%3CT, R%3E memoized = new Function%3CT, R%3E() %7B%0A            private final Map%3CT, R%3E store = new HashMap%3C%3E();%0A%0A            public R apply(final T input) %7B%0A                return store.computeIfAbsent(input, key -%3E function.apply(this, key));%0A            %7D%0A        %7D;%0A        return memoized.apply(input);%0A    %7D%0A%7D%0A

Create Memoizer.java