Nowości w Javie 8 okiem programisty
1.
Nowości w Javie8 okiem programisty
Marcin Stachniuk
mstachniuk@gmail.com
http://mstachniuk.blogspot.com
7 marca 2015
Marcin Stachniuk Nowości w Javie 8 okiem programisty 1/25
2.
O mnie
Marcin Stachniuk
Chorążyna chamberconf.pl
Kontakt: mstachniuk@gmail.com
Blog: mstachniuk.blogspot.com
Twitter: @MarcinStachniuk
Recenzent: practicalunittesting.com
Marcin Stachniuk Nowości w Javie 8 okiem programisty 2/25
3.
Agenda
1 Wyrażenia Lambda
2Strumienie 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
4.
Agenda
1 Wyrażenia Lambda
2Strumienie 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
5.
Czym jest Lambda?
WyrażeniaLambda (λ) to w uproszczeniu implementacja
anonimowej, wewnętrznej klasy zawierająca dokładnie jedną
abstrakcyjną metodę.
Marcin Stachniuk Nowości w Javie 8 okiem programisty 5/25
6.
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: @Override
5: 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
7.
Czym jest Lambda?
Jaksamemu napisać metodę przyjmującą Lambdę jako argument?
1: public class SomeClass {
2:
3: public void setListener(Listener listener) {
4: }
5:
6: @FunctionalInterface // this is optional
7: 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
8.
Agenda
1 Wyrażenia Lambda
2Strumienie 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
9.
Czym jest Stream?
koncepcyjnieto stała struktura danych, w której elementy
mogą być obliczone na żądanie
lepszy iterator
Marcin Stachniuk Nowości w Javie 8 okiem programisty 9/25
10.
Czym jest Stream?
koncepcyjnieto stała struktura danych, w której elementy
mogą być obliczone na żądanie
lepszy iterator
Marcin Stachniuk Nowości w Javie 8 okiem programisty 9/25
11.
Czym jest Stream?
Przykładowyproblem
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
Co zyskujemy stosującstrumienie?
przekazując jako argumenty metod funkcje, a nie wyniki ich
działania, implementacja decyduje kiedy (i czy w ogóle je
wywołać)
dostajemy Lazy Evaluation za darmo
skupiamy się na esencji tego co chcemy przekazać, a nie na
kodzie 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
14.
Co zyskujemy stosującstrumienie?
przekazując jako argumenty metod funkcje, a nie wyniki ich
działania, implementacja decyduje kiedy (i czy w ogóle je
wywołać)
dostajemy Lazy Evaluation za darmo
skupiamy się na esencji tego co chcemy przekazać, a nie na
kodzie 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
15.
Co zyskujemy stosującstrumienie?
przekazując jako argumenty metod funkcje, a nie wyniki ich
działania, implementacja decyduje kiedy (i czy w ogóle je
wywołać)
dostajemy Lazy Evaluation za darmo
skupiamy się na esencji tego co chcemy przekazać, a nie na
kodzie 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
16.
Co zyskujemy stosującstrumienie?
przekazując jako argumenty metod funkcje, a nie wyniki ich
działania, implementacja decyduje kiedy (i czy w ogóle je
wywołać)
dostajemy Lazy Evaluation za darmo
skupiamy się na esencji tego co chcemy przekazać, a nie na
kodzie 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
17.
Co zyskujemy stosującstrumienie?
przekazując jako argumenty metod funkcje, a nie wyniki ich
działania, implementacja decyduje kiedy (i czy w ogóle je
wywołać)
dostajemy Lazy Evaluation za darmo
skupiamy się na esencji tego co chcemy przekazać, a nie na
kodzie 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
18.
Co zyskujemy stosującstrumienie?
przekazując jako argumenty metod funkcje, a nie wyniki ich
działania, implementacja decyduje kiedy (i czy w ogóle je
wywołać)
dostajemy Lazy Evaluation za darmo
skupiamy się na esencji tego co chcemy przekazać, a nie na
kodzie 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
19.
Agenda
1 Wyrażenia Lambda
2Strumienie 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
20.
Domyślne metody winterfejsach
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
21.
Po co namdomyś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
22.
Po co namdomyś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
23.
Po co namdomyś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
24.
Przykłady domyślnych metodyw JDK
List
default void sort(Comparator<? super E> c)
default void replaceAll(UnaryOperator<E> operator)
default Spliterator<E> spliterator()
Collection
default Stream<E> stream()
default Stream<E> parallelStream()
default boolean removeIf(Predicate<? super E> filter)
default Spliterator<E> spliterator()
Iterable
default void forEach(Consumer<? super T> action)
Marcin Stachniuk Nowości w Javie 8 okiem programisty 16/25
25.
Agenda
1 Wyrażenia Lambda
2Strumienie 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
26.
Statyczne metody winterfejsach
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
27.
Po co namstatyczne 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
28.
Po co namstatyczne 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
29.
Agenda
1 Wyrażenia Lambda
2Strumienie 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
30.
Czym był PermanentGeneration (PermGen Space)?
miejsce w pamięci, gdzie lądowały załadowane klasy wraz z
metodami
przed JDK 7 lądowały tam również teksty
Marcin Stachniuk Nowości w Javie 8 okiem programisty 21/25
31.
Czym był PermanentGeneration (PermGen Space)?
miejsce w pamięci, gdzie lądowały załadowane klasy wraz z
metodami
przed JDK 7 lądowały tam również teksty
Marcin Stachniuk Nowości w Javie 8 okiem programisty 21/25
32.
Co z PermGenw Javie 8?
został usunięty
żegnaj: OutOfMemoryError: PermGen
Marcin Stachniuk Nowości w Javie 8 okiem programisty 22/25
33.
Co z PermGenw Javie 8?
został usunięty
żegnaj: OutOfMemoryError: PermGen
Marcin Stachniuk Nowości w Javie 8 okiem programisty 22/25
34.
Co w zamianPermGen?
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
35.
Co w zamianPermGen?
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
36.
Co w zamianPermGen?
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
37.
Co w zamianPermGen?
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
Nowości w Javie8 okiem programisty
Marcin Stachniuk
mstachniuk@gmail.com
http://mstachniuk.blogspot.com
Dziękuję!
7 marca 2015
Marcin Stachniuk Nowości w Javie 8 okiem programisty 25/25