Mam pewną kolekcję, którą chciałbym przefiltrować, a potem wyznaczyć element spełniający jakąś minimalną wartość:
myCollection,stream().filter(p).min(Comparator.comparing(v));
W powyższym p
jest pewnym predykatem, a v
obiektem funkcyjnym zwracającym wartość typu mającego zdefiniowaną relację porównania (np. double
).
Co jeśli p
i v
wykonują pod spodem te same obliczenia? Czy da się wykonać je tylko raz, a potem wykorzystać w kilku miejscach? Np. czy w takim przykładzie:
myCollection,stream()
.filter(element -> longRunningCalculationScore(element) < Double.POSITIVE_INFINITY)
.min(Comparator.comparing(element -> longRunningCalculationScore(element)));
element -> longRunningCalculationScore(element)
będzie wykonany raz i wykorzystany w obu miejscach, czy wykona się go dwukrotnie?