Documente Academic
Documente Profesional
Documente Cultură
Prezentare 16:
Streams –
elemente de
baza
PROGRAMARE ORIENTATA
OBIECT
2020
Streams
13.01.2021 POO 3
Streams
Java 8++
import static java.util.Comparator.comparing; selecteaza feluri cu
import static java.util.stream.Collectors.toList; < 500 calorii
List<String> numeFeluriNecalorice = meniu.stream()
.filter(f -> f.getCalorii() < 500)
.sorted(comparing(Fel::getCalorii))
.map(Fel::getNume)
sorteaza dupa
stocheaza numele in lista .collect(toList()); calorii
13.01.2021 POO 4
Streams
13.01.2021 POO 5
Streams
13.01.2021 POO 6
Streams
resurse I/O)
operatii de prelucrare a datelor – suporta operatii similare
13.01.2021 POO 7
Streams
filter(f->f.getCalorii()>300)
Stream<Fel>
map(Fel::getNume)
Stream<String>
limit(3)
Stream<String>
collect(toList())
List<String>
13.01.2021 POO 9
Streams vs colectii
13.01.2021 POO 10
Streams vs colectii
13.01.2021 POO 11
Streams vs colectii
13.01.2021 POO 12
Streams vs colectii
De fapt:
14.01.2021 POO 13
Streams vs colectii
stocheaza rezultatul
13.01.2021 POO 14
Streams vs colectii
Streams – iteratii interne
Elemente
Cod
Elemente
Cod
14.01.2021 POO 15
Operatii
14.01.2021 POO 16
Operatii
Interfata java.util.stream.Stream
operatii intermediare - pot fi conectate pentru a forma un pipeline
15.01.2021 POO 17
Operatii
operatii operatii
intermediare finale
14.01.2021 POO 18
Operatii
Operatii intermediare
intorc ca rezultat un alt stream -> permite conectarea operatiilor
– comportament lazy
13.01.2021 POO 19
Operatii
List<String> nume =
meniu.stream()
.filter(f -> {
afiseaza felurile pe masura System.out.println(“filtare” + f.getNume());
ce sunt filtrate return f.getCalorii() > 300;
})
.map(f -> {
System.out.println(“map” + f.getNume());
return f.getNume();
afiseaza felurile pe masura
}) ce sunt extrase numele
.limit(3)
.collect(toList());
System.out.println(nume);
13.01.2021 POO 20
Operatii
Se va afisa:
filtrare:porc
map:porc
filtrare:pui
map:pui
filtrare:peste
map:peste
Sunt realizate optimizari pe baza naturii lazy a stream-urilor
13.01.2021 POO 21
Operatii
Operatii finale
produc rezultatul unui pipeline – o valoarea care nu este un stream:
meniu.stream.forEach(System.out.println);
13.01.2021 POO 22
Utilizare streams
Presupune:
o sursa de date (colectie) asupra careia se face interogarea
13.01.2021 POO 23
Utilizare streams
Filtrare
filtrare prin predicat – metoda filter
Selectie
selectie prin predicat – metodele takeWhile si dropWhile
14.01.2021 POO 26
Utilizare streams
takeWhile
List<String> meniuFiltrat = meniuSpecial.stream()
.takeWhile(f -> f.getCalorii() < 400)
.collect(toList());
Exemplu – felurile cu mai mult de 400 calorii
dropWhile
14.01.2021 POO 27
Utilizare streams
Trunchiere
limit – creeaza un alt stream limitat la lungimea primita ca parametru
15.01.2021 POO 29
Utilizare streams
Map
aplicarea unei functii fiecarui element al stream-ului
15.01.2021 POO 30