package org.apache.commons.collections.map; import java.util.AbstractMap; import java.util.Map; import java.util.Set; import org.apache.commons.collections.Transformer; public class LazyMap<K, V> extends AbstractMap<K, V> { private Map<K, V> map; private Transformer factory; public LazyMap(Map<K, V> map, Transformer factor) { super(); this.map = map; this.factory = factor; } public static <K, V> Map<K, V> decorate(Map<K, V> map, Transformer factory) { return new LazyMap<K, V>(map, factory); } @Override public Set<java.util.Map.Entry<K, V>> entrySet() { throw new UnsupportedOperationException(); } @SuppressWarnings("unchecked") @Override public V get(Object key) { // create value for key if key is not currently in the map if (map.containsKey(key) == false) { V value = (V) factory.transform(key); map.put((K) key, value); return value; } return map.get(key); } }