blob: e762a755742ceddd581e3f8fccd8023e33e4dbac [file] [log] [blame] [raw]
package protocolsupport.utils;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
public class CachedInstanceOfChain<T> {
private final Map<Class<?>, T> knownPaths = new LinkedHashMap<>();
private final Map<Class<?>, T> cachedPaths = new HashMap<>();
public void setKnownPath(Class<?> clazz, T path) {
knownPaths.put(clazz, path);
}
public T selectPath(Class<?> clazz) {
return cachedPaths.computeIfAbsent(clazz, k ->
knownPaths.entrySet().stream()
.filter(entry -> entry.getKey().isAssignableFrom(k))
.map(Map.Entry::getValue)
.findFirst().orElse(null)
);
}
}