Documente Academic
Documente Profesional
Documente Cultură
Prezentare 18:
Streams –
colectarea
datelor
PROGRAMARE ORIENTATA
OBIECT
2020
Streams – colectare date
Java >=8
24.01.2021 POO 3
Streams – colectare date
Functie de
transformare
extrage valuta
traverseaza
tranzactiei adauga perechea
fiecare tranzactie
din stream valuta/tranzactie la map
24.01.2021 POO 4
Streams – colectare date
gruparea elementelor
partitionarea elementelor
24.01.2021 POO 5
Streams – colectare date
Reducere si sumarizare
Exemplu – numarul felurilor din meniu utilizand colectorul intors de
metoda counting
long numarFeluri = meniu.stream().collect(Collectors.counting());
25.01.2021 POO 6
Streams – colectare date
Comparator<Fel> compCalorii =
Comparator.comparingInt(Fel::getCalorii);
Optional<Fel> felMaxCalorii =
meniu.stream()
.collect(maxBy(compCalorii));
24.01.2021 POO 7
Streams – colectare date
24.01.2021 POO 8
Streams – colectare date
Statistici – Collectors.summarizingInt
Exemplu – suma, media, min, max caloriilor din meniu
IntSummaryStatistics statisticiMeniu =
meniu.stream().collect(summarizingInt(Fel::getCalorii));
24.01.2021 POO 10
Streams – colectare date
reduce vs collect
25.01.2021 POO 11
Streams – colectare date
Grupare – Collectors.groupingBy
Exemplu – clasificarea felurilor din meniu pe baza tipului lor (carne,
peste, altele)
Map<Fel.Tip, List<Fel>> claseFeluri =
meniu.stream().collect(groupingBy(Fel::getTip));
Exemplu – clasificarea felurilor din meniu pe baza numarului de calorii
public enum NivelCalorii {DIET, NORMAL, GRAS}
Map<NivelCalorii, List<Fel>> felNivelCaloric = meniu.stream().collect(
groupingBy(fel -> {
if (fel.getCalorii() <= 400) return NivelCalorii.DIET;
else if (fel.getCalorii() <= 700) return NivelCalorii.NORMAL;
else return NivelCalorii.GRAS;
24.01.2021
})); POO 12
Streams – colectare date
25.01.2021 POO 13
Streams – colectare date
25.01.2021 POO 14
Streams – colectare date
24.01.2021 POO 15
Streams – colectare date
24.01.2021 POO 16
Streams – colectare date
24.01.2021 POO 17
Streams – colectare date
24.01.2021 POO 18
Streams – colectare date
24.01.2021 POO 19
Streams – colectare date
Interfata Collector
25.01.2021 POO 20
Streams – colectare date
Metoda supplier
public Supplier<List<T>> supplier() {
return () -> new ArrayList<T>();
}
25.01.2021 POO 21
Streams – colectare date
Metoda accumulator
public BiConsumer<List<T>, T> accumulator() {
return (list, elem) -> list.add(elem);
}
25.01.2021 POO 22
Streams – colectare date
Metoda finisher
public Function<List<T>, List<T>> finisher() {
return Function.identity();
}
Metoda combiner
25.01.2021 POO 23
Streams – colectare date
25.01.2021 POO 24
Streams – colectare date
import java.util.*;
import java.util.function.*;
import java.stream.Collector;
import java.stream.Collector.Characteristics.*;
@override
public Function<List<T>, List<T>> finisher() {
return Function.identity();
}
@override
public BinaryOperator<List<T>> combiner() {
return (list1, list2) ->
list1.addAll(list2);
return list;
}
}
@override
public Set<Characteristics> characteristics() {
return Collections.unmodifiableSet(enumSet.of(
IDENTITY.FINISH, CONCURRENT));
}
}
25.01.2021 POO 26