Sunteți pe pagina 1din 17

Java Professional

Curs 2
Supplier<T> public T get();

Consumer<T> public void (T); accept

BiConsumer<T, U> public void accept(T,U);

Predicate<T> public boolean test(T);


BiPredicate<T,U> public boolean test(T,U);
INPUT OUTPUT

Function<T, R> public R apply(T);


INPUT OUTPUT

BiFunction<T, U, R> public R apply(T,U);

UnaryOperator<T> public T apply(T);

BinaryOperator<T,T> public T apply(T,T);


Interfete functionale pentru primitive

IntFunction, DoubleFunction, LongFunction: tipul de return este generic.


ToIntFunction, ToDoubleFunction, ToLongFunction: tipul pentru input este generic, cel de
return fiind specificat din numele interfeței.
DoubleToIntFunction, DoubleToLongFunction, IntToDoubleFunction, IntToLongFunction,
LongToIntFunction, LongToDoubleFunctionse: atât tipul de input, cât și cel de return sunt
specificate din nume.
BooleanSupplier, IntSupplier, DoubleSupplier, LongSupplier: întorc o primitivă.
IntConsumer, DoubleConsumer, LongConsumer: consumă o primitivă.
IntPredicate, DoublePredicate, LongPredicate: variante predicate pentru primitive.
DoubleUnaryOperator, IntUnaryOperator, LongUnaryOperator, DoubleBinaryOperator,
IntBinaryOperator, LongBinaryOperator.
Un stream reprezinta un pipeline pe care se afla obiecte care provin dintr-o sursa,
li se aplica un set de operatii intermediare si sunt in final colectate (ca o linie de
productie intr-o fabrica).
Operatii intermediare
Operatii de limitare

Stream.limit(long N) -> primeste ca argument un long N si returneaza un stream cu N numar de


elemente.

Stream.takeWhile(Predicate p) -> trec elemente atata timp cat predicatul returneaza adevarat. La
prima valoare “false” se opreste.

Stream.filter(Predicate p) -> pastreaza acele elemente pentru care predicatul returneaza true

Operatii pe toate elementele streamului

Stream.sorted() -> sorteaza elementele streamului

Stream.distinct() -> preia elementele distincte


https://www.baeldung.com/java-difference-map-and-flatmap
Creati un stream infinit cu numere care incep de la 0 si cresc din doi in doi.
Extrageti din stream primele 10 numere divizibile cu 6 si 8.
Operatii terminale

.count()-> returneaza numarul de obiecte de pe stream intr-un long.

.reduce(0,(a,b) -> a+b )

T reduce(T identity, BinaryOperator<T> accumulator);

-identity este valoarea initiala de tip T


-accumulator este o funtie ce combina doua valori
allMatch : pentru toate elementele de pe stream, predicatul a returnat true

anyMatch : pentru toate elementele de pe stream, cel putin pentru unul dintre ele predicatul a returnat true

noneMatch : predicatul nu a returnat true pentru niciun element de pe stream

Returneaza boolean in functie de rezultatul predicatului si operatia


aleasa
.min(Comparator) -> intoarce cel mai mic parametru folosind un comparator

.max(Comparator) -> intoarce cel mai mare parametru folosind un comparator

Metode specifice streamurilor de primitive


sum()
average()
Collectors

Collectors.toList()
Collectors.toSet()

Collectors.toCollection(Tip de colectie) -> pentru metodele toList si toSet nu avem un control asupra
implementarii, decidem noi care este colectia in care trensformam stringul.

.toMap(Function) -> creaza un map din elementele date. Trebuie sa specificam care este cheia si care este
valoarea
.partitioningBy(Predicate<? super T> predicate) -> separa lista in 2
clustere (true/false) in functie de rezultatul predicatului

.groupingBy(Function classifier) -> separa lista in clustere in functie de


rezultatul clasificatorului

.joining() -> returneaza un collector care alatura sau concateneaza streamul input intr-
un string
Oras : -> nume
-> numar locuitori
-> suprafata

• Returneaza lista numelor oraselor care au mai mult de 1000 de locuitori (o colectie
unica)
• Numarul de orase care incep cu A
• Separarea numelor oraselor, cele care incep cu “A” / sau o litera primita si cele
care nu incep cu litera respectiva
• Separarea oraselor dupa suprafata (cele care au mai putin de 1000 si cele care au
mai mult)
• Returneaza un map in care cheia este densitatea popilatiei si valoarea reprezentata
de orasele respective
• Suma literelor oraselor care se termina cu “I”.
java.util.Optional<T>

Este un tip de data ce modeleaza obiectele ce pot fi nule.

Scopul lui este de a inlocui folosirea valorii null pentru situatiile in care nu exista o instanta de obiect care sa
poata fi returnata, pentru evitarea des intalnitei NullPointerException.
Metode de retinut
• Optional.empty() -> returneaza o “cutie” goala

• Optional.of (T value)-> returneaza o cutie ce contine valoarea T,iar daca


aceasta este exista arunca o exceptie

• Optional.ofNullable(T value)-> returneaza o cutie ce contine valoarea T, iar


daca aceasta nu exista returneaza o cutie goala.
Metode de retinut
• op.isPresent()-> returneaza true daca exista un obiect in cutie

• op.isPresent(Consumer <? Super T> consumer)-> daca avem ceva in cutie


atunci se va invoca acel consumer, altfel nu face nimic.

• op.isEmpty() -> returneaza true daca “cutia” este goala


• op.orElse() -> returneaza valoarea din op daca exista, altfel returneaza
valoarea default.
• op.orElseGet(Supplier<? Super T> other) -> returneaza valoarea din op daca
exista, altfel returneaza valoarea oferita de supplier.
• op.isPresentOrElse()
• op.get() -> returneza valoarea din op, daca nu arunca o exceptie

S-ar putea să vă placă și