SlideShare una empresa de Scribd logo
1 de 39
Descargar para leer sin conexión
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Co z PermGen w Javie 8?
został usunięty
żegnaj: OutOfMemoryError: PermGen
Marcin Stachniuk Nowości w Javie 8 okiem programisty 22/25
Co z PermGen w Javie 8?
został usunięty
żegnaj: OutOfMemoryError: PermGen
Marcin Stachniuk Nowości w Javie 8 okiem programisty 22/25
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
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
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
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
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 2015
Marcin Stachniuk Nowości w Javie 8 okiem programisty 25/25

Más contenido relacionado

Similar a Nowości w Javie 8 okiem programisty

Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JSDawid Rusnak
 
Confitura 2015 - Code Quality Keepers @ Allegro
Confitura 2015 - Code Quality Keepers @ AllegroConfitura 2015 - Code Quality Keepers @ Allegro
Confitura 2015 - Code Quality Keepers @ Allegroallegro.tech
 
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future ProcessingPROIDEA
 
Więcej testów/mniej kodu - Michał Gaworski, kraQA 13
Więcej testów/mniej kodu - Michał Gaworski, kraQA 13Więcej testów/mniej kodu - Michał Gaworski, kraQA 13
Więcej testów/mniej kodu - Michał Gaworski, kraQA 13kraqa
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowychTomasz Borowski
 
Jak nie zwariować z tymi pakietami
Jak nie  zwariować z tymi pakietamiJak nie  zwariować z tymi pakietami
Jak nie zwariować z tymi pakietamiArek Bee.
 
Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?javOnet
 
RxJS okiem doświadczonego inżyniera - Angular Warsaw #13
RxJS okiem doświadczonego inżyniera - Angular Warsaw #13RxJS okiem doświadczonego inżyniera - Angular Warsaw #13
RxJS okiem doświadczonego inżyniera - Angular Warsaw #13Piotr Kowalski
 
Dependency Injection w Androidzie
Dependency Injection w AndroidzieDependency Injection w Androidzie
Dependency Injection w AndroidzieThe Software House
 
Inicjatywa NoSQL na przykładzie db4o
Inicjatywa NoSQL na przykładzie db4oInicjatywa NoSQL na przykładzie db4o
Inicjatywa NoSQL na przykładzie db4oMarcinStachniuk
 
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...Future Processing
 
Tworzenie i utrzymywanie czystego kodu
Tworzenie i utrzymywanie czystego koduTworzenie i utrzymywanie czystego kodu
Tworzenie i utrzymywanie czystego kodupabloware
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyqbeuek
 
Zasady technicznej organizacji projektów programistycznych
Zasady technicznej organizacji projektów programistycznychZasady technicznej organizacji projektów programistycznych
Zasady technicznej organizacji projektów programistycznychsztywny
 
Pułapki programowania obiektowego
Pułapki programowania obiektowego Pułapki programowania obiektowego
Pułapki programowania obiektowego Adam Sawicki
 
Poznańska grupa .Net spotkanie VI - Test Driven Development
Poznańska grupa .Net spotkanie VI - Test Driven DevelopmentPoznańska grupa .Net spotkanie VI - Test Driven Development
Poznańska grupa .Net spotkanie VI - Test Driven Developmentbartlomiej.szafko
 
Praktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlPraktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlSebastian Marek
 

Similar a Nowości w Javie 8 okiem programisty (20)

Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JS
 
Confitura 2015 - Code Quality Keepers @ Allegro
Confitura 2015 - Code Quality Keepers @ AllegroConfitura 2015 - Code Quality Keepers @ Allegro
Confitura 2015 - Code Quality Keepers @ Allegro
 
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing
 
DSL - DYI
DSL - DYIDSL - DYI
DSL - DYI
 
university day 1
university day 1university day 1
university day 1
 
Więcej testów/mniej kodu - Michał Gaworski, kraQA 13
Więcej testów/mniej kodu - Michał Gaworski, kraQA 13Więcej testów/mniej kodu - Michał Gaworski, kraQA 13
Więcej testów/mniej kodu - Michał Gaworski, kraQA 13
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowych
 
Jak nie zwariować z tymi pakietami
Jak nie  zwariować z tymi pakietamiJak nie  zwariować z tymi pakietami
Jak nie zwariować z tymi pakietami
 
Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?
 
RxJS okiem doświadczonego inżyniera - Angular Warsaw #13
RxJS okiem doświadczonego inżyniera - Angular Warsaw #13RxJS okiem doświadczonego inżyniera - Angular Warsaw #13
RxJS okiem doświadczonego inżyniera - Angular Warsaw #13
 
Dependency Injection w Androidzie
Dependency Injection w AndroidzieDependency Injection w Androidzie
Dependency Injection w Androidzie
 
Inicjatywa NoSQL na przykładzie db4o
Inicjatywa NoSQL na przykładzie db4oInicjatywa NoSQL na przykładzie db4o
Inicjatywa NoSQL na przykładzie db4o
 
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
 
Tworzenie i utrzymywanie czystego kodu
Tworzenie i utrzymywanie czystego koduTworzenie i utrzymywanie czystego kodu
Tworzenie i utrzymywanie czystego kodu
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatyczny
 
JavaScript, Moduły
JavaScript, ModułyJavaScript, Moduły
JavaScript, Moduły
 
Zasady technicznej organizacji projektów programistycznych
Zasady technicznej organizacji projektów programistycznychZasady technicznej organizacji projektów programistycznych
Zasady technicznej organizacji projektów programistycznych
 
Pułapki programowania obiektowego
Pułapki programowania obiektowego Pułapki programowania obiektowego
Pułapki programowania obiektowego
 
Poznańska grupa .Net spotkanie VI - Test Driven Development
Poznańska grupa .Net spotkanie VI - Test Driven DevelopmentPoznańska grupa .Net spotkanie VI - Test Driven Development
Poznańska grupa .Net spotkanie VI - Test Driven Development
 
Praktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlPraktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPl
 

Más de MarcinStachniuk

GraphQL - Piękne API w Twojej Aplikacji - KrakowGraphAcademy
GraphQL - Piękne API w Twojej Aplikacji - KrakowGraphAcademyGraphQL - Piękne API w Twojej Aplikacji - KrakowGraphAcademy
GraphQL - Piękne API w Twojej Aplikacji - KrakowGraphAcademyMarcinStachniuk
 
Wroclaw GraphQL - GraphQL in Java
Wroclaw GraphQL - GraphQL in JavaWroclaw GraphQL - GraphQL in Java
Wroclaw GraphQL - GraphQL in JavaMarcinStachniuk
 
[DevCrowd] GraphQL - gdy API RESTowe to za mało
[DevCrowd] GraphQL - gdy API RESTowe to za mało[DevCrowd] GraphQL - gdy API RESTowe to za mało
[DevCrowd] GraphQL - gdy API RESTowe to za małoMarcinStachniuk
 
GraphQL - gdy API RESTowe to za mało
GraphQL - gdy API RESTowe to za małoGraphQL - gdy API RESTowe to za mało
GraphQL - gdy API RESTowe to za małoMarcinStachniuk
 
BruJUG Brussels GraphQL when RESR API is to less - lessons learned
BruJUG Brussels GraphQL when RESR API is to less - lessons learnedBruJUG Brussels GraphQL when RESR API is to less - lessons learned
BruJUG Brussels GraphQL when RESR API is to less - lessons learnedMarcinStachniuk
 
[WroclawJUG] Continuous Delivery in OSS using Shipkit
[WroclawJUG] Continuous Delivery in OSS using Shipkit[WroclawJUG] Continuous Delivery in OSS using Shipkit
[WroclawJUG] Continuous Delivery in OSS using ShipkitMarcinStachniuk
 
Continuous Delivery in OSS using Shipkit.org
Continuous Delivery in OSS using Shipkit.orgContinuous Delivery in OSS using Shipkit.org
Continuous Delivery in OSS using Shipkit.orgMarcinStachniuk
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedMarcinStachniuk
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedMarcinStachniuk
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedMarcinStachniuk
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedMarcinStachniuk
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedMarcinStachniuk
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedMarcinStachniuk
 
GraphQL - when REST API is not enough - lessons learned
GraphQL - when REST API is not enough - lessons learnedGraphQL - when REST API is not enough - lessons learned
GraphQL - when REST API is not enough - lessons learnedMarcinStachniuk
 
Java Web Start – jak żyć z tą dziwną technologią
Java Web Start – jak żyć z tą dziwną technologiąJava Web Start – jak żyć z tą dziwną technologią
Java Web Start – jak żyć z tą dziwną technologiąMarcinStachniuk
 
Zarządzanie zmianami w schemacie relacyjnych baz danych
Zarządzanie zmianami w schemacie relacyjnych baz danychZarządzanie zmianami w schemacie relacyjnych baz danych
Zarządzanie zmianami w schemacie relacyjnych baz danychMarcinStachniuk
 
Automatic mechanism data migration between relational and object database
Automatic mechanism data migration between relational and object databaseAutomatic mechanism data migration between relational and object database
Automatic mechanism data migration between relational and object databaseMarcinStachniuk
 
Zastosowanie obiektowych baz danych na przykładzie db4o
Zastosowanie obiektowych baz danych na przykładzie db4oZastosowanie obiektowych baz danych na przykładzie db4o
Zastosowanie obiektowych baz danych na przykładzie db4oMarcinStachniuk
 
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017MarcinStachniuk
 

Más de MarcinStachniuk (20)

GraphQL - Piękne API w Twojej Aplikacji - KrakowGraphAcademy
GraphQL - Piękne API w Twojej Aplikacji - KrakowGraphAcademyGraphQL - Piękne API w Twojej Aplikacji - KrakowGraphAcademy
GraphQL - Piękne API w Twojej Aplikacji - KrakowGraphAcademy
 
Wroclaw GraphQL - GraphQL in Java
Wroclaw GraphQL - GraphQL in JavaWroclaw GraphQL - GraphQL in Java
Wroclaw GraphQL - GraphQL in Java
 
[DevCrowd] GraphQL - gdy API RESTowe to za mało
[DevCrowd] GraphQL - gdy API RESTowe to za mało[DevCrowd] GraphQL - gdy API RESTowe to za mało
[DevCrowd] GraphQL - gdy API RESTowe to za mało
 
GraphQL - gdy API RESTowe to za mało
GraphQL - gdy API RESTowe to za małoGraphQL - gdy API RESTowe to za mało
GraphQL - gdy API RESTowe to za mało
 
BruJUG Brussels GraphQL when RESR API is to less - lessons learned
BruJUG Brussels GraphQL when RESR API is to less - lessons learnedBruJUG Brussels GraphQL when RESR API is to less - lessons learned
BruJUG Brussels GraphQL when RESR API is to less - lessons learned
 
[WroclawJUG] Continuous Delivery in OSS using Shipkit
[WroclawJUG] Continuous Delivery in OSS using Shipkit[WroclawJUG] Continuous Delivery in OSS using Shipkit
[WroclawJUG] Continuous Delivery in OSS using Shipkit
 
Continuous Delivery in OSS using Shipkit.org
Continuous Delivery in OSS using Shipkit.orgContinuous Delivery in OSS using Shipkit.org
Continuous Delivery in OSS using Shipkit.org
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
 
GraphQL - when REST API is not enough - lessons learned
GraphQL - when REST API is not enough - lessons learnedGraphQL - when REST API is not enough - lessons learned
GraphQL - when REST API is not enough - lessons learned
 
Java Web Start – jak żyć z tą dziwną technologią
Java Web Start – jak żyć z tą dziwną technologiąJava Web Start – jak żyć z tą dziwną technologią
Java Web Start – jak żyć z tą dziwną technologią
 
Zarządzanie zmianami w schemacie relacyjnych baz danych
Zarządzanie zmianami w schemacie relacyjnych baz danychZarządzanie zmianami w schemacie relacyjnych baz danych
Zarządzanie zmianami w schemacie relacyjnych baz danych
 
Automatic mechanism data migration between relational and object database
Automatic mechanism data migration between relational and object databaseAutomatic mechanism data migration between relational and object database
Automatic mechanism data migration between relational and object database
 
Zastosowanie obiektowych baz danych na przykładzie db4o
Zastosowanie obiektowych baz danych na przykładzie db4oZastosowanie obiektowych baz danych na przykładzie db4o
Zastosowanie obiektowych baz danych na przykładzie db4o
 
Wprowadzenie do J2ME
Wprowadzenie do J2MEWprowadzenie do J2ME
Wprowadzenie do J2ME
 
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
 

Nowości w Javie 8 okiem programisty

  • 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. 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. 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. 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. 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. 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? 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Co z PermGen w Javie 8? został usunięty żegnaj: OutOfMemoryError: PermGen Marcin Stachniuk Nowości w Javie 8 okiem programisty 22/25
  • 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. 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. 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. 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. 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. Pytania ? Marcin Stachniuk Nowości w Javie 8 okiem programisty 24/25
  • 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