static A lowestAccordingTo(Collection l, O scoreFunction) { new Lowest lowest; for (A a : l) lowest.put(a, toDouble(callF(scoreFunction, a))); ret lowest.get(); }