Nowości w Javie 8 okiem programisty
-
Upload
marcinstachniuk -
Category
Software
-
view
515 -
download
1
Transcript of Nowości w Javie 8 okiem programisty
![Page 1: Nowości w Javie 8 okiem programisty](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/1.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/2.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/3.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/4.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/5.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/6.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/7.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/8.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/9.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/10.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/11.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/12.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/13.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/14.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/15.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/16.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/17.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/18.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/19.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/20.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/21.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/22.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/23.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/24.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/25.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/26.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/27.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/28.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/29.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/30.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/31.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/32.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/33.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/34.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/35.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/36.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/37.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/38.jpg)
Pytania
?
Marcin Stachniuk Nowości w Javie 8 okiem programisty 24/25
![Page 39: Nowości w Javie 8 okiem programisty](https://reader030.fdocument.pub/reader030/viewer/2022020213/587dc53c1a28ab1b498b6f5b/html5/thumbnails/39.jpg)
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