JAVA 8
Obsah
- Lambda (lambfa expression)
- Odkazy na metody (Method references)
- Defaultní metody (Default method)
- Optional
- Stream API
- DateTime API
- novinky v nástrojích( tools, utiliti, compiler)
Lambda expression
- přímá implementace místo anonymní třídy
- implementace funkčního interface = interface co má práve jednu metodu
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("RUN");
}
};
Runnable runnable = () -> System.out.println("RUN");
Lambda expression
Syntax
- arguments - (int x, int y)
- arrow - ->
- body - x+y
Lambda expression
java.util.function
- Predicate<T>: test predpokladu objektu
- Consumer<T>: vykoná akci nad objektem
- Function<T, R>: konverze T -> R
- Supplier<T>: Poskytne instanci objektu T
- UnaryOperator<T>: operace T -> T
- BinaryOperator<T>: operace (T, T) -> T
Lambda expression
Omezení?
- horší čitelnost stackTrace a debug
- horší čitelnost nového kódu
- checked výjimky musí být vyřešeny uvnitř.
- genericita musí být v interface, ne jen metoda
Method reference
- umožňuje odkazovat se na metody operátorem ::
- statické, instanční a kontruktor
Method reference
public class Customer {
...
public void printName() {
System.out.println(name);
}
}
customers.forEach(Customer::printName);
Default method
- umožňuje implementovat metodu v interface
- označují se 'default'
- umožňuje pozměnit interface bez zásahu do implementací
- umožňuje mnohonásobnou dědičnost
Default method
Problémy?
- Diamond problem
- více interfaces obsahuje stejnou default metodu.
Optional<T>
- Wrapper pro object
- Kontejner který může ale nemusí obsahovat daný objekt
- Při jeho zpracování musíme kontrolovat co v něm je
public Optional<Customer> getCustomer(String name) {}
Customer customer = getCustomer("jikra").orElse(DEFAULT_CUSTOMER);
Optional<T>
Proč a kdy ho používat?
- Zjednoduší kód
- Odstraní/Zmenší výskyt NPE
- Používat výhradně jako return type
Optional<T>
funkce
- Vytvoření optional
- Optional.of()
- Optional.ofNullable()
- Optional.empty()
- ifPresent - provede předanou fci když obsahuje data
- orElse/orElseGet - když neobsahuje data, dodá defaultní
- orElseThrow - vyhodí exception když data nejsou
- filter - na základě předané fce vrátí Optinal z daty nebo bez
- map - pokud obsahuje data, aplikuje na ně předanou funkci
- flatMap - to same jako map, ale zabrání Optional<Optional<T>> zdvojení
Streams
- reprezentuje sequenci objektů ze zdroje
- podporuje agregační operace(filter, map, sort,..)
- operace lze řetězit
- jak se jednou projde tak se uzavře
Streams
- Operace nad stremem:
- přechodné - vrací stream
- koncové - nevrací stream
- Vytvoření streamu:
- Stream.of(), Stream.generate()
- stream() - standartní stream nad daty
- parallelStream() - nativní podpora pro multithread
Streams
metody
- Filter
- filter - vrátí stream s daty splňující předanou podmínku
- distinct - vrátí stream s unikátními daty
- limit(n) - vrátí stream s maximální velikostí n
- skip(n) - vrátí stream bez n prvních znaků
Streams
metody
- Match
- anyMatch - alespoň jedna hodnota splňuje podmínku
- allMatch - všechna data splňují podmínku
- noneMatch - žádný z prvků nesplňuje podmínku
- Find
- findFirst - vrací první prvek ze streamu (jako Optional)
- findAny - vrací nějaký prvek ze streamu (jako Optional)
Streams
metody
- Map - nad každým prvkem v 1 úrovni provede funkci
- FlatMap - nad každým prvkem ve 2 úrovních provede funkci
source : {{a, b},{c, d},{e, f}}
map -> {a, b}, {c, d}, {e, f}
flatmap -> {a, b, c, d, e, f}
Streams
metody
- Reduce - kombinuje vsechny elementy do jednoho
- Collect - umožňuje uložit data ze streamu do kolekce
DateTime API
- náhrada za nepoužitelné java.util.Date
- velice podobné jodaTime
- threadsafe - všechny core třídy jsou immutable
DateTime API
- LocalDate - pouze datum
- LocalTime - pouze čas
- LocalDateTime - datum a čas
- ZonedDateTime - datum a čas s časovou zónou
- OffsetTime - čas posunutý do časové zóny
DateTime API
- Periods - doba mezi daty (roky, měsíce, dny)
- Durations - přesná doba mezi časy
- ChronoUnit - umožňuje změřit čas v určitých jednotkách(dny, měsíce)
DateTime API
- SQL mapování
DATE | LocalDate |
TIME | LocalTime |
TIMESTAMP | LocalDateTime |
TIME WITH TIMEZONE | OffsetTime |
TIMESTAMP WITH TIMEZONE | OffsetDateTime |
Jiné
- vylepšení security (algoritmy, TLS1.2)
- reflexe parametrů metod (-parameters)
- nashorn - javascript v JVM
JAVA 8
By Jiří Čížek
JAVA 8
- 380