Documente Academic
Documente Profesional
Documente Cultură
Prezentare 15:
Lambda expresii
Verificare de tip,
Inferenta de tip,
Restrictii
PROGRAMARE ORIENTATA
OBIECT
2020
Lambda expresii – verificare de tip
List<Mar> maiGreuDecat150g =
filter(inventar, (Mar mar) -> mar.getGreutate() > 150);
11.01.2021 POO 2
Lambda expresii – verificare de tip
filter(inventar, (Mar mar) -> mar.getGreutate() > 150);
Care este contextul de
utilizare a lambda expresiei?
filter(List<Mar> inventar, Predicate<Mar> p);
Tipul destinatie este
Predicate<Mar>
Tip destinatie Mar -> Boolean se
potriveste cu signatura
Care este metoda lambda expresiei
abstracta in iterfata
Predicate<Mar> boolean test(Mar mar)
11.01.2021 POO 3
Aceeasi lambda, diferite interfete
11.01.2021 POO 4
Inferenta de tip
Comparator<Mar> c =
(Mar m1, Mar m2) -> m1.getGreutate().compareTo(m2.getGreutate());
Cu inferenta de tip
Comparator<Mar> c =
(m1, m2) -> m1.getGreutate().compareTo(m2.getGreutate());
11.01.2021 POO 5
Utilizarea variabilelor locale in lambda
expresii
11.01.2021 POO 6
Referinte la metode
inventar.sort(comparing(Mar::getGreutate));
11.01.2021 POO 7
Referinte la metode
11.01.2021 POO 8
Referinte la metode
11.01.2021 POO 9
Referinte la metode
filter(cuvinte, this::eNumeValid)
11.01.2021 POO 10
Referinte la metode
11.01.2021 POO 11
Referinte la metode
11.01.2021 POO 12
Referinte la metode
11.01.2021 POO 13
Referinte la constructori
NumeClasa::new
Similar cu referinta la o metoda statica
referinta la constructorul
Supplier<Mar> c1 = Mar::new; implicit Mar()
Mar m1 = c1.get();
apelul metodei get din
Supplier creeaza un nou mar
Echivalent cu:
11.01.2021 POO 15
Referinte la constructori
Echivalent cu:
BiFunction<String, Integer, Mar> c3 = (culoare, greut) -> new Mar(culoare,
greut);
Mar m3 = c3.apply(VERDE, 150);
11.01.2021 POO 16
Utilizare lambda si referinte la metode
inventar.sort(new ComparatorMar());
11.01.2021 POO 17
Utilizare lambda si referinte la metode
inventar.sort(new Comparator<Mar>() {
public int compare(Mar m1, Mar m2) {
return m1.getGreutate().compareTo(m2.getGreutate());
}
});
11.01.2021 POO 18
Utilizare lambda si referinte la metode
11.01.2021 POO 19
Utilizare lambda si referinte la metode
11.01.2021 POO 20
Utilizare lambda si referinte la metode
11.01.2021 POO 21
Compunerea lambda expresiilor
Compunerea comparatorilor
Metoda statica Comparator.comparing intoarce un comparator
pe baza unei functii (Function) care extrage cheia pentru
comparatie:
Comparator<Mar> c = Comparator.comparing(Mar :: getGreutate();
11.01.2021 POO 22
Compunerea lambda expresiilor
Compunerea comparatorilor
Inlantuirea comparatorilor
Daca avem doua mere cu aceeasi greutate, vrem sa le sortam
dupa tara de origine
inventar.sort(comparing(Mar :: getGreut()
.reversed()
.thenComparing(Mar :: getTara));
11.01.2021 POO 23
Compunerea lambda expresiilor
Compunerea predicatelor
Predicate<Mar>marRosuGreuSauVerde =
marRosu.and(mar -> mar.getGreutate() > 150)
.or(mar -> VERDE.equals(m.getCuloare()));
11.01.2021 POO 24
Compunerea lambda expresiilor
Compunerea functiilor