Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Nowości w Javie 8 okiem programisty
Marcin Stachniuk
mstachniuk@gmail.com
http://mstachniuk.blogspot.com
7 marca 2015
Marc...
O mnie
Marcin Stachniuk
Chorąży na chamberconf.pl
Kontakt: mstachniuk@gmail.com
Blog: mstachniuk.blogspot.com
Twitter: @Ma...
Agenda
1 Wyrażenia Lambda
2 Strumienie danych
3 Domyślne metody w interfejsach
4 Statyczne metody w interfejsach
5 Permane...
Agenda
1 Wyrażenia Lambda
2 Strumienie danych
3 Domyślne metody w interfejsach
4 Statyczne metody w interfejsach
5 Permane...
Czym jest Lambda?
Wyrażenia Lambda (λ) to w uproszczeniu implementacja
anonimowej, wewnętrznej klasy zawierająca dokładnie...
Czym jest Lambda?
Przykład, czyli zamiast tego kodu:
1: List<Integer> numbers = Arrays.asList(1, 5, 6, 7, 2, 4, 3);
2:
3: ...
Czym jest Lambda?
Jak samemu napisać metodę przyjmującą Lambdę jako argument?
1: public class SomeClass {
2:
3: public voi...
Agenda
1 Wyrażenia Lambda
2 Strumienie danych
3 Domyślne metody w interfejsach
4 Statyczne metody w interfejsach
5 Permane...
Czym jest Stream?
koncepcyjnie to stała struktura danych, w której elementy
mogą być obliczone na żądanie
lepszy iterator
...
Czym jest Stream?
koncepcyjnie to stała struktura danych, w której elementy
mogą być obliczone na żądanie
lepszy iterator
...
Czym jest Stream?
Przykładowy problem
Znajdź w zbiorze imion pierwsze żeńskie, dłuższe niż 5 znaków,
krótsze niż 8, zaczyn...
Rozwiązanie
1: public String findNameByComplicatedCondition(List<String> names) {
2: return names.stream()
3: .filter(name...
Co zyskujemy stosując strumienie?
przekazując jako argumenty metod funkcje, a nie wyniki ich
działania, implementacja decy...
Co zyskujemy stosując strumienie?
przekazując jako argumenty metod funkcje, a nie wyniki ich
działania, implementacja decy...
Co zyskujemy stosując strumienie?
przekazując jako argumenty metod funkcje, a nie wyniki ich
działania, implementacja decy...
Co zyskujemy stosując strumienie?
przekazując jako argumenty metod funkcje, a nie wyniki ich
działania, implementacja decy...
Co zyskujemy stosując strumienie?
przekazując jako argumenty metod funkcje, a nie wyniki ich
działania, implementacja decy...
Co zyskujemy stosując strumienie?
przekazując jako argumenty metod funkcje, a nie wyniki ich
działania, implementacja decy...
Agenda
1 Wyrażenia Lambda
2 Strumienie danych
3 Domyślne metody w interfejsach
4 Statyczne metody w interfejsach
5 Permane...
Domyślne metody w interfejsach
1: public interface Person {
2:
3: String getSurname();
4: String getLastName();
5:
6: defa...
Po co nam domyślne metody w interfejsach?
rozszerzanie opublikowanych już interfejsów
aby uniknąć modyfikacji wielu klas
ab...
Po co nam domyślne metody w interfejsach?
rozszerzanie opublikowanych już interfejsów
aby uniknąć modyfikacji wielu klas
ab...
Po co nam domyślne metody w interfejsach?
rozszerzanie opublikowanych już interfejsów
aby uniknąć modyfikacji wielu klas
ab...
Przykłady domyślnych metody w JDK
List
default void sort(Comparator<? super E> c)
default void replaceAll(UnaryOperator<E>...
Agenda
1 Wyrażenia Lambda
2 Strumienie danych
3 Domyślne metody w interfejsach
4 Statyczne metody w interfejsach
5 Permane...
Statyczne metody w interfejsach
1: public interface Person {
2:
3: static int getId() {
4: return 42;
5: }
6: }
1: System....
Po co nam statyczne metody w interfejsach?
aby funkcje narzędziowe tam pakować
aby było o co pytać na rozmowach kwalifikacy...
Po co nam statyczne metody w interfejsach?
aby funkcje narzędziowe tam pakować
aby było o co pytać na rozmowach kwalifikacy...
Agenda
1 Wyrażenia Lambda
2 Strumienie danych
3 Domyślne metody w interfejsach
4 Statyczne metody w interfejsach
5 Permane...
Czym był Permanent Generation (PermGen Space)?
miejsce w pamięci, gdzie lądowały załadowane klasy wraz z
metodami
przed JD...
Czym był Permanent Generation (PermGen Space)?
miejsce w pamięci, gdzie lądowały załadowane klasy wraz z
metodami
przed JD...
Co z PermGen w Javie 8?
został usunięty
żegnaj: OutOfMemoryError: PermGen
Marcin Stachniuk Nowości w Javie 8 okiem program...
Co z PermGen w Javie 8?
został usunięty
żegnaj: OutOfMemoryError: PermGen
Marcin Stachniuk Nowości w Javie 8 okiem program...
Co w zamian PermGen?
w zamian ładowane klasy lądują w obszarze Metaspace
obszar ten jest w obszarze natywnym pamięci
podle...
Co w zamian PermGen?
w zamian ładowane klasy lądują w obszarze Metaspace
obszar ten jest w obszarze natywnym pamięci
podle...
Co w zamian PermGen?
w zamian ładowane klasy lądują w obszarze Metaspace
obszar ten jest w obszarze natywnym pamięci
podle...
Co w zamian PermGen?
w zamian ładowane klasy lądują w obszarze Metaspace
obszar ten jest w obszarze natywnym pamięci
podle...
Pytania
?
Marcin Stachniuk Nowości w Javie 8 okiem programisty 24/25
Nowości w Javie 8 okiem programisty
Marcin Stachniuk
mstachniuk@gmail.com
http://mstachniuk.blogspot.com
Dziękuję!
7 marca...
Upcoming SlideShare
Loading in …5
×

Nowości w Javie 8 okiem programisty

701 views

Published on

Prezentacja z konferencji careercon.pl we Wrocławiu. Slajdy i przykłady przygotowane w 5 dni

Published in: Software
  • Be the first to comment

Nowości w Javie 8 okiem programisty

  1. 1. Nowości w Javie 8 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. 2. O mnie Marcin Stachniuk Chorąży na 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. 3. 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
  4. 4. 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
  5. 5. Czym jest Lambda? Wyrażenia Lambda (λ) 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. 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. 7. 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 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. 8. 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
  9. 9. Czym jest Stream? koncepcyjnie to 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. 10. Czym jest Stream? koncepcyjnie to 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. 11. 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
  12. 12. 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
  13. 13. Co zyskujemy stosując strumienie? 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. 14. Co zyskujemy stosując strumienie? 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. 15. Co zyskujemy stosując strumienie? 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. 16. Co zyskujemy stosując strumienie? 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. 17. Co zyskujemy stosując strumienie? 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. 18. Co zyskujemy stosując strumienie? 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. 19. 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
  20. 20. 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
  21. 21. 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
  22. 22. 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
  23. 23. 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
  24. 24. Przykłady domyślnych metody w 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. 25. 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
  26. 26. 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
  27. 27. 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
  28. 28. 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
  29. 29. 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
  30. 30. Czym był Permanent Generation (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. 31. Czym był Permanent Generation (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. 32. Co z PermGen w Javie 8? został usunięty żegnaj: OutOfMemoryError: PermGen Marcin Stachniuk Nowości w Javie 8 okiem programisty 22/25
  33. 33. Co z PermGen w Javie 8? został usunięty żegnaj: OutOfMemoryError: PermGen Marcin Stachniuk Nowości w Javie 8 okiem programisty 22/25
  34. 34. 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
  35. 35. 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
  36. 36. 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
  37. 37. 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
  38. 38. Pytania ? Marcin Stachniuk Nowości w Javie 8 okiem programisty 24/25
  39. 39. Nowości w Javie 8 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

×