sclass LazyValueTreeMap extends TreeMap { static B placeholder = cast new O; // fool type system O valueMaker; *(Collection keys, O *valueMaker) { for (A key : unnull(keys)) put(key, placeholder); } public B get(O key) { B value = super.get(key); if (value == placeholder) put(key, value = callF(valueMaker, key)); ret value; } }