I have a stream of objects and I would like to find the one with a maximal value of some attribute that\'s expensive to calculate.
As a specific simple example, say
Thanks everyone for suggestions. At last I found the solution I like the most at Efficiency of the way comparator works -- the answer from bayou.io:
Have a general purpose cache method:
public static Function cache(Function f, Map cache)
{
return k -> cache.computeIfAbsent(k, f);
}
public static Function cache(Function f)
{
return cache(f, new IdentityHashMap<>());
}
This could then be used as follows:
String coolestString = stringList
.stream()
.max(Comparator.comparing(cache(CoolUtil::coolnessIndex)))
.orElse(null);