39
Nowości w Javie 8 okiem programisty Marcin Stachniuk [email protected] http://mstachniuk.blogspot.com 7 marca 2015 Marcin Stachniuk Nowości w Javie 8 okiem programisty 1/25

Nowości w Javie 8 okiem programisty

Embed Size (px)

Citation preview

Page 1: Nowości w Javie 8 okiem programisty

Nowości w Javie 8 okiem programisty

Marcin [email protected]

http://mstachniuk.blogspot.com

7 marca 2015

Marcin Stachniuk Nowości w Javie 8 okiem programisty 1/25

Page 2: Nowości w Javie 8 okiem programisty

O mnie

Marcin StachniukChorąży na chamberconf.plKontakt: [email protected]: mstachniuk.blogspot.comTwitter: @MarcinStachniuk

Recenzent: practicalunittesting.com

Marcin Stachniuk Nowości w Javie 8 okiem programisty 2/25

Page 3: Nowości w Javie 8 okiem programisty

Agenda

1 Wyrażenia Lambda

2 Strumienie danych

3 Domyślne metody w interfejsach

4 Statyczne metody w interfejsach

5 Permanent Generation

Marcin Stachniuk Nowości w Javie 8 okiem programisty 3/25

Page 4: Nowości w Javie 8 okiem programisty

Agenda

1 Wyrażenia Lambda

2 Strumienie danych

3 Domyślne metody w interfejsach

4 Statyczne metody w interfejsach

5 Permanent Generation

Marcin Stachniuk Nowości w Javie 8 okiem programisty 4/25

Page 5: Nowości w Javie 8 okiem programisty

Czym jest Lambda?

Wyrażenia Lambda (λ) to w uproszczeniu implementacjaanonimowej, wewnętrznej klasy zawierająca dokładnie jedną

abstrakcyjną metodę.

Marcin Stachniuk Nowości w Javie 8 okiem programisty 5/25

Page 6: Nowości w Javie 8 okiem programisty

Czym jest Lambda?

Przykład, czyli zamiast tego kodu:

1: List<Integer> numbers = Arrays.asList(1, 5, 6, 7, 2, 4, 3);2:3: numbers.sort(new Comparator<Integer>() {4: @Override5: public int compare(Integer n1, Integer n2) {6: return n2 - n1;7: }8: });

możemy napisać tak:

1: numbers.sort((n1, n2) -> n2 - n1);

lub tak:

1: numbers.sort(Comparator.reverseOrder());

Marcin Stachniuk Nowości w Javie 8 okiem programisty 6/25

Page 7: Nowości w Javie 8 okiem programisty

Czym jest Lambda?

Jak samemu napisać metodę przyjmującą Lambdę jako argument?

1: public class SomeClass {2:3: public void setListener(Listener listener) {4: }5:6: @FunctionalInterface // this is optional7: interface Listener {8: void executeSomeAction(String event);9: }10: }

1: SomeClass someClass = new SomeClass();2: someClass.setListener(event -> System.out.println(event));

Marcin Stachniuk Nowości w Javie 8 okiem programisty 7/25

Page 8: Nowości w Javie 8 okiem programisty

Agenda

1 Wyrażenia Lambda

2 Strumienie danych

3 Domyślne metody w interfejsach

4 Statyczne metody w interfejsach

5 Permanent Generation

Marcin Stachniuk Nowości w Javie 8 okiem programisty 8/25

Page 9: Nowości w Javie 8 okiem programisty

Czym jest Stream?

koncepcyjnie to stała struktura danych, w której elementymogą być obliczone na żądanie

lepszy iterator

Marcin Stachniuk Nowości w Javie 8 okiem programisty 9/25

Page 10: Nowości w Javie 8 okiem programisty

Czym jest Stream?

koncepcyjnie to stała struktura danych, w której elementymogą być obliczone na żądanie

lepszy iterator

Marcin Stachniuk Nowości w Javie 8 okiem programisty 9/25

Page 11: Nowości w Javie 8 okiem programisty

Czym jest Stream?

Przykładowy problem

Znajdź w zbiorze imion pierwsze żeńskie, dłuższe niż 5 znaków,krótsze niż 8, zaczynające się na „C” i zwróć je poprawnie napisane

Marcin Stachniuk Nowości w Javie 8 okiem programisty 10/25

Page 12: Nowości w Javie 8 okiem programisty

Rozwiązanie

1: public String findNameByComplicatedCondition(List<String> names) {2: return names.stream()3: .filter(name -> name.endsWith("a"))4: .filter(name -> name.length() > 5)5: .filter(name -> name.length() < 8)6: .filter(name -> name.startsWith("c") name.startsWith("C"))7: .findFirst()8: .map(String::toLowerCase)9: .map(name -> ("" + name.charAt(0)).toUpperCase()10: + name.substring(1, name.length()))11: .get();12: }

Marcin Stachniuk Nowości w Javie 8 okiem programisty 11/25

Page 13: Nowości w Javie 8 okiem programisty

Co zyskujemy stosując strumienie?

przekazując jako argumenty metod funkcje, a nie wyniki ichdziałania, implementacja decyduje kiedy (i czy w ogóle jewywołać)

dostajemy Lazy Evaluation za darmo

skupiamy się na esencji tego co chcemy przekazać, a nie nakodzie do napisania wokoło

mieszamy kompozycję obiektów i kompozycję funkcji

unikamy zmiany stanu

ułatwia wielowątkowość

Marcin Stachniuk Nowości w Javie 8 okiem programisty 12/25

Page 14: Nowości w Javie 8 okiem programisty

Co zyskujemy stosując strumienie?

przekazując jako argumenty metod funkcje, a nie wyniki ichdziałania, implementacja decyduje kiedy (i czy w ogóle jewywołać)

dostajemy Lazy Evaluation za darmo

skupiamy się na esencji tego co chcemy przekazać, a nie nakodzie do napisania wokoło

mieszamy kompozycję obiektów i kompozycję funkcji

unikamy zmiany stanu

ułatwia wielowątkowość

Marcin Stachniuk Nowości w Javie 8 okiem programisty 12/25

Page 15: Nowości w Javie 8 okiem programisty

Co zyskujemy stosując strumienie?

przekazując jako argumenty metod funkcje, a nie wyniki ichdziałania, implementacja decyduje kiedy (i czy w ogóle jewywołać)

dostajemy Lazy Evaluation za darmo

skupiamy się na esencji tego co chcemy przekazać, a nie nakodzie do napisania wokoło

mieszamy kompozycję obiektów i kompozycję funkcji

unikamy zmiany stanu

ułatwia wielowątkowość

Marcin Stachniuk Nowości w Javie 8 okiem programisty 12/25

Page 16: Nowości w Javie 8 okiem programisty

Co zyskujemy stosując strumienie?

przekazując jako argumenty metod funkcje, a nie wyniki ichdziałania, implementacja decyduje kiedy (i czy w ogóle jewywołać)

dostajemy Lazy Evaluation za darmo

skupiamy się na esencji tego co chcemy przekazać, a nie nakodzie do napisania wokoło

mieszamy kompozycję obiektów i kompozycję funkcji

unikamy zmiany stanu

ułatwia wielowątkowość

Marcin Stachniuk Nowości w Javie 8 okiem programisty 12/25

Page 17: Nowości w Javie 8 okiem programisty

Co zyskujemy stosując strumienie?

przekazując jako argumenty metod funkcje, a nie wyniki ichdziałania, implementacja decyduje kiedy (i czy w ogóle jewywołać)

dostajemy Lazy Evaluation za darmo

skupiamy się na esencji tego co chcemy przekazać, a nie nakodzie do napisania wokoło

mieszamy kompozycję obiektów i kompozycję funkcji

unikamy zmiany stanu

ułatwia wielowątkowość

Marcin Stachniuk Nowości w Javie 8 okiem programisty 12/25

Page 18: Nowości w Javie 8 okiem programisty

Co zyskujemy stosując strumienie?

przekazując jako argumenty metod funkcje, a nie wyniki ichdziałania, implementacja decyduje kiedy (i czy w ogóle jewywołać)

dostajemy Lazy Evaluation za darmo

skupiamy się na esencji tego co chcemy przekazać, a nie nakodzie do napisania wokoło

mieszamy kompozycję obiektów i kompozycję funkcji

unikamy zmiany stanu

ułatwia wielowątkowość

Marcin Stachniuk Nowości w Javie 8 okiem programisty 12/25

Page 19: Nowości w Javie 8 okiem programisty

Agenda

1 Wyrażenia Lambda

2 Strumienie danych

3 Domyślne metody w interfejsach

4 Statyczne metody w interfejsach

5 Permanent Generation

Marcin Stachniuk Nowości w Javie 8 okiem programisty 13/25

Page 20: Nowości w Javie 8 okiem programisty

Domyślne metody w interfejsach

1: public interface Person {2:3: String getSurname();4: String getLastName();5:6: default String getFullName() {7: return getSurname() + " " + getLastName();8: }9: }

Marcin Stachniuk Nowości w Javie 8 okiem programisty 14/25

Page 21: Nowości w Javie 8 okiem programisty

Po co nam domyślne metody w interfejsach?

rozszerzanie opublikowanych już interfejsów

aby uniknąć modyfikacji wielu klas

aby można było zaimplementować Lambdy

Marcin Stachniuk Nowości w Javie 8 okiem programisty 15/25

Page 22: Nowości w Javie 8 okiem programisty

Po co nam domyślne metody w interfejsach?

rozszerzanie opublikowanych już interfejsów

aby uniknąć modyfikacji wielu klas

aby można było zaimplementować Lambdy

Marcin Stachniuk Nowości w Javie 8 okiem programisty 15/25

Page 23: Nowości w Javie 8 okiem programisty

Po co nam domyślne metody w interfejsach?

rozszerzanie opublikowanych już interfejsów

aby uniknąć modyfikacji wielu klas

aby można było zaimplementować Lambdy

Marcin Stachniuk Nowości w Javie 8 okiem programisty 15/25

Page 24: Nowości w Javie 8 okiem programisty

Przykłady domyślnych metody w JDK

Listdefault void sort(Comparator<? super E> c)default void replaceAll(UnaryOperator<E> operator)default Spliterator<E> spliterator()

Collectiondefault Stream<E> stream()default Stream<E> parallelStream()default boolean removeIf(Predicate<? super E> filter)default Spliterator<E> spliterator()

Iterabledefault void forEach(Consumer<? super T> action)

Marcin Stachniuk Nowości w Javie 8 okiem programisty 16/25

Page 25: Nowości w Javie 8 okiem programisty

Agenda

1 Wyrażenia Lambda

2 Strumienie danych

3 Domyślne metody w interfejsach

4 Statyczne metody w interfejsach

5 Permanent Generation

Marcin Stachniuk Nowości w Javie 8 okiem programisty 17/25

Page 26: Nowości w Javie 8 okiem programisty

Statyczne metody w interfejsach

1: public interface Person {2:3: static int getId() {4: return 42;5: }6: }

1: System.out.println(Person.getId());

Marcin Stachniuk Nowości w Javie 8 okiem programisty 18/25

Page 27: Nowości w Javie 8 okiem programisty

Po co nam statyczne metody w interfejsach?

aby funkcje narzędziowe tam pakować

aby było o co pytać na rozmowach kwalifikacyjnych ;-)

Marcin Stachniuk Nowości w Javie 8 okiem programisty 19/25

Page 28: Nowości w Javie 8 okiem programisty

Po co nam statyczne metody w interfejsach?

aby funkcje narzędziowe tam pakować

aby było o co pytać na rozmowach kwalifikacyjnych ;-)

Marcin Stachniuk Nowości w Javie 8 okiem programisty 19/25

Page 29: Nowości w Javie 8 okiem programisty

Agenda

1 Wyrażenia Lambda

2 Strumienie danych

3 Domyślne metody w interfejsach

4 Statyczne metody w interfejsach

5 Permanent Generation

Marcin Stachniuk Nowości w Javie 8 okiem programisty 20/25

Page 30: Nowości w Javie 8 okiem programisty

Czym był Permanent Generation (PermGen Space)?

miejsce w pamięci, gdzie lądowały załadowane klasy wraz zmetodami

przed JDK 7 lądowały tam również teksty

Marcin Stachniuk Nowości w Javie 8 okiem programisty 21/25

Page 31: Nowości w Javie 8 okiem programisty

Czym był Permanent Generation (PermGen Space)?

miejsce w pamięci, gdzie lądowały załadowane klasy wraz zmetodami

przed JDK 7 lądowały tam również teksty

Marcin Stachniuk Nowości w Javie 8 okiem programisty 21/25

Page 32: Nowości w Javie 8 okiem programisty

Co z PermGen w Javie 8?

został usunięty

żegnaj: OutOfMemoryError: PermGen

Marcin Stachniuk Nowości w Javie 8 okiem programisty 22/25

Page 33: Nowości w Javie 8 okiem programisty

Co z PermGen w Javie 8?

został usunięty

żegnaj: OutOfMemoryError: PermGen

Marcin Stachniuk Nowości w Javie 8 okiem programisty 22/25

Page 34: Nowości w Javie 8 okiem programisty

Co w zamian PermGen?

w zamian ładowane klasy lądują w obszarze Metaspace

obszar ten jest w obszarze natywnym pamięci

podlega odśmiecaniu

podlega dynamicznemu powiększaniu w razie konieczności

Marcin Stachniuk Nowości w Javie 8 okiem programisty 23/25

Page 35: Nowości w Javie 8 okiem programisty

Co w zamian PermGen?

w zamian ładowane klasy lądują w obszarze Metaspace

obszar ten jest w obszarze natywnym pamięci

podlega odśmiecaniu

podlega dynamicznemu powiększaniu w razie konieczności

Marcin Stachniuk Nowości w Javie 8 okiem programisty 23/25

Page 36: Nowości w Javie 8 okiem programisty

Co w zamian PermGen?

w zamian ładowane klasy lądują w obszarze Metaspace

obszar ten jest w obszarze natywnym pamięci

podlega odśmiecaniu

podlega dynamicznemu powiększaniu w razie konieczności

Marcin Stachniuk Nowości w Javie 8 okiem programisty 23/25

Page 37: Nowości w Javie 8 okiem programisty

Co w zamian PermGen?

w zamian ładowane klasy lądują w obszarze Metaspace

obszar ten jest w obszarze natywnym pamięci

podlega odśmiecaniu

podlega dynamicznemu powiększaniu w razie konieczności

Marcin Stachniuk Nowości w Javie 8 okiem programisty 23/25

Page 38: Nowości w Javie 8 okiem programisty

Pytania

?

Marcin Stachniuk Nowości w Javie 8 okiem programisty 24/25

Page 39: Nowości w Javie 8 okiem programisty

Nowości w Javie 8 okiem programisty

Marcin [email protected]

http://mstachniuk.blogspot.com

Dziękuję!7 marca 2015

Marcin Stachniuk Nowości w Javie 8 okiem programisty 25/25