Streams API Flashcards
Vyjmenuj package a ifc, ktera se pouzivaji ve Streamech (5)
java.util.function:
Predicate
Function
UnaryOperator
Consumer
Supplier
Metoda ifc Predicate
boolean test(T t)
Metoda ifc Function
R apply(T t)
Metoda ifc UnaryOperator
T apply(T t)
Metoda ifc Consumer
void accept(T t)
Metoda ifc Supplier
T get()
Streamy pro primitivni typy k odstraneni nutnosti autoboxingu (3)
IntStream
LongStream
DoubleStream
StreamSupport.longStream(spliterator, false)
Druh funkce, kterou lze pouzit uprostred stream zpracovani (8)
Intermediate
filter
map
flatMap
mapToDouble
distinct
skip
peek
dropWhile
sorted
Druh funkce, kterou lze pouzit na konci stream zpracovani (9)
Terminal
forEach
forEachOrdered
reduce
collect
sum,count,min,max,average
Druh funkce, kterou lze pouzit pro zuzeni nekonecneho streamu na konecny (7)
Short-circuit
takeWhile
limit
allMatch
anyMatch
noneMatch
findAny
findFirst
IntStream: Jaky je nazev prislusneho predicate interface a predpis jeho funkce
IntPredicate
boolean testInt(int i)
Zpracovani streamu: druh, kdy se zacne, co vse se vyhodnocuje
Lazy
Az je to nutne
Jen to, co je nutne pro vysledek
Stream je mutable/immutable
Immutable
Bi varianta: consumer ifc a predpis jeho metody
BiConsumer
void accept(S s, T t)
Bi varianta: unaryOperator ifc a predpis jeho metody
BinaryOperator
T apply(T t1, T t2)
Sekvencni a paralelni stream se z listu udela pomoci…
Stream z array se udela pomoci…
Stream se ze spliteratoru udela pomoci…
list.stream()
list.stream().parallel() / list.parallelStream()
Arrays.stream(array)
StreamSupport.stream(spliterator, isParallel)
Funkce, kterou se kombinuji consumeri
c1.andThen(c2)
Napis consumera pro scitani
Consumer<Integer> c = (a,b) -> a+b;</Integer>
Function.identity(x) vraci
x
Predicates lze spojovat pomoci metod (2), negovat pomoci metod (2)
and, or
negate, P.not(p)
Metoda retezeni Consumeru
andThen()
Dvě metody řetězení Funkcí a jejich rozdíl
f1.andThen(f2) - nejdriv jde f1
f1.compose(f2) - nejdriv jde f2
Spliterator - co, kdy se používá, jak ho vyrobit
Obdoba iterátoru, má navíc split() a statistické charakteristiky, nepotřebuje hasNext() (efektivnejsi)
Vhodný pro paralelní zpracování
collection.spliterator
Statistické vlastnosti Spliterator
Metoda + 6 vlastnosti
characteristics ()
SIZED, SUBSIZED
SORTED, ORDERED
DISTINCT
NONNULL
CONCURENT
IMMUTABLE
reduce() vs collect()
Oba berou dva prvky a dělají z něho jeden pomocí akumulátoru
Collect ho navíc zabalí do kolekce
Metody vhodné pro paralelní zpracování, které vytvoří ze streamu list, set, map (3)
Metoda vhodná pro sekvenční zpracování, která vytvoří ze streamu map
stream.collect(…);
Collectors.toList
Collectors.toSet
Collectors.toConcurrentMap
Collectors.toMap
Kdy je vhodné použít paralelní zpracování streamu
Velká sada vstupních dat
Více CPU
Zpracování náročné na CPU
Metody spliteratoru pro provedeni akce (2)
metoda ziskani velikosti
metoda na SORTED
tryAdvance() - boolean
forEachRemaining() - jde od konce
estimateSize()
getComparator()
Metody pro provedeni map, flatMap a filter na streamu a ulozeni do kolekce
Collectors.mapping(fce, collector)
Collectors.flatMapping(fce, collector)
Collectors.filtering(fce, collector)
Metoda pro prevedeni streamu na kolekci a pak provedeni fce nad prvky
Collectors.collectAndThen(collector, fce)
Partition na streamu, jak se dela, co je vysledkem
Collectors.partitionBy(fce)
vraci mapu, keys=true/false, values jsou seznamy podle toho, jestli splnuji fci
Grouping na streamu, jak se dela, co je vysledkem
Collectors.groupingBy(fce)
vraci mapu, keys=hodnoty podle fce, values jsou seznamy podle keys
Jak seradim stream podle metody getName a getAge objektu?
stream.sorted(Comparator.comparing(MyClass::getName)
.thenComparing(MyClass::getAge))
Jak ze streamu udelam csv line?
stream.collect(Collectors.joining(“,”));
Jak ze streamu udelam mapu? (2p)
Jak jsou ulozene hodnoty?
stream.collect(Collectors.groupingBy(keyFce))
stream.collect(Collectors.groupingBy(keyFce, valueFce))
Jako ArrayList
Jak ze streamu udelam mapu, keys jsou true, false?
stream.collect(Collectors.partitioningBy(predicate));
Jak vytvorit z listu ordered stream?
Stream.iterate(list)
Jak ziskat nekonecny stream celych cisel
IntStream.generate(() -> Math.random * 10)
Rozdil mezi chovanim filter(x-> x<5) a takeWhile(x-> x<5)
Filter se chova vzdy stejne
TakeWhile skonci pri prvnim nezdaru a ma na unordered streamu NESTABILNI VYSLEDKY!
Jak vytvorit stream ze suppliera?
Stream.generate(fce);
Predikat pro rovnost (metoda)
Predicate.isEqual(x, y)
Kolik se vytiskne znaku? Proc?
Stream o 3 prvcich:
stream.peek(sout(x)).findAny();
Jeden.
Protoze short-circuit. Odzadu potrebuju jeden, tak ostatni nezpracovavam
Mam stream jen s intermediate operacemi. Co se stane?
Neprovedou se, bo tam neni terminalni operace (laziness)