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