package com.genuinevm.tests; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; public class MemoizedFunction implements Function { public final Map cache = new ConcurrentHashMap<>(); private final Function function; public MemoizedFunction(Function function) { this.function = function; } public Function normal() { return function::apply; } @Override public U apply(T t) { return cache.computeIfAbsent(t, function); } }