Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Java 8 Co nowego w Javie 8 SE Błażej Karwowski.  Wyrażenia i inne nowości w języku  Zmiany w kolekcjach  =cześnie  Kilka słów o bezpieczeństwie 

Podobne prezentacje


Prezentacja na temat: "Java 8 Co nowego w Javie 8 SE Błażej Karwowski.  Wyrażenia i inne nowości w języku  Zmiany w kolekcjach  =cześnie  Kilka słów o bezpieczeństwie "— Zapis prezentacji:

1 Java 8 Co nowego w Javie 8 SE Błażej Karwowski

2  Wyrażenia i inne nowości w języku  Zmiany w kolekcjach  =cześnie  Kilka słów o bezpieczeństwie  I18N oraz czas i data  Java FX – lepszy Swing?  Nosorożec czyli JavaScript w Javie Agenda λ

3 Zmiany w Javie ? Znowu? Wyrażenia λ Referencje do metod i metody domyślne Zmiany w adnotacjach Refleksja parametrów metod Wyrażenia λ i inne nowości w języku

4 1.Runnable noArguments = () -> System.out.println("Hello World"); 2.ActionListener oneArgument = event -> System.out.println("button clicked"); 3.Runnable multiStatement = () -> { System.out.print("Hello"); System.out.println(" World"); }; 4.BinaryOperator add = (x, y) -> x + y; 5.BinaryOperator addExplicit = (Long x, Long y) -> x + y; Wyrażenia λ

5 Wyrażenia λ – przydatne interfejsy InterfejsArgumentyWartość zwracanaPrzykład Predicate TBoolean Czy dziś jest czwartek? Consumer TVoid Wypisywanie na ekran. Function TR Pobranie wartości z obiektu. Supplier Brak ()T Metoda tworząca obiekty UnaryOperator TT Logiczne not (!) BinaryOperator (T, T)T Np. dodawanie, mnożenie

6 RodzajPrzykład Referencja do metody statycznejNazwaKlasy::nazwaMetodyStatycznej Referencja do zwykłej metodyObjekt::nazwaMetody Referencja do metody wywoływanej na rzecz obiektu danego typu NazwaTypu::nazwaMetody Referencja do konstruktoraNazwaKlasy::new (NazwaKlasy[]::new) Referencje do metod

7  Dlaczego istnieją?  Wielodziedziczenie Przykład: default void forEach(Consumer action) { for (T t : this) { action.accept(t); } Metody domyślne

8 Zmiany w kolekcjach Obsługa λ, „strumieni” i „operacji agregujących” Poprawa wydajności

9 Zmodyfikowane pakiety Zmiany w kolekcjach – zmienione pakiety  java.util.function  java.util.stream PAkietNowe klasyZmodyfikowane klasy java.ioUncheckedIOExceptionBufferedReader java.lang -- AutoCloseable ThreadLocal String Iterable CharSequence Boolean Integer Long Float Double java.nio.file -- Files java.util PrimitiveIteratorArrays SpliteratorBitSet DoubleSummaryStatisticsCollection IntSummaryStatisticsComparator LongSummaryStatisticsIterator OptionalList OptionalDoubleMap OptionalIntMap.Entry OptionalLongLinkedHashMap SpliteratorsRandom SplittableRandomTreeMap StringJoiner java.util.concurrent -- ThreadLocalRandom java.util.jar -- JarFile java.util.zip -- ZipFile java.util.logging -- Logger java.util.regex -- Pattern Nowe pakiety

10 Cechy:  Brak przechowywanych danych  Funkcyjne  Leniące się :D  Potencjalnie nieskończone  Zużywalne Sposoby tworzenia:  Na podstawie kolekcji za pomocą metod stream() i parallelStream()  Z tablic za pomocą Arrays.stream(Object[])  Za pomocą metody wytwórczej np. Stream.of(Object[]), IntStream.range(int, int)  Na podstawie linii z pliku za pomocą: BufferedReader.lines()  Z klasy Random za pomocą metody ints()  Za pomocą wielu innych metod z JDK. Zmiany w kolekcjach – strumienie

11 =cześnie czyli współbieżność λ również tutaj Nowe klasy, metody i interfejsy

12  collect(toList()) List collected = Stream.of("a", "b", "c").collect(Collectors.toList());  map List collected1 = Stream.of("a", "b", "hello").map(string -> string.toUpperCase()).collect(Collectors.toList());  filter List beginningWithNumbers = Stream.of("a", "1abc", "abc1").filter(value -> Character.isDigit(value.charAt(0))).collect(Collectors.toList()); Przykłady – operacje na strumieniach

13 Przetwarzanie współbieżne a równoległe

14 List pracownicy = Arrays.asList( new Pracownik("Adam", "Kowalski", 1.5), new Pracownik("Maciej","Majewski", 2.0), new Pracownik("Jędrzej", "Kaczmarek", 0.5), new Pracownik("Zofia", "Szczepańska", 3.0)); double sumaCzasupracySzeregowo pracownicy.stream().mapToDouble(Pracownik::getStazPracy).sum(); double sumaCzasupracyRownloegle = pracownicy.parallelStream().mapToDouble(Pracownik::getStazPracy).sum(); double[] values = new double[100]; Arrays.parallelSetAll(values, i -> new Random().nextDouble()); Przetwarzanie równoległe oraz λ

15 double[] values = new double[100]; Arrays.parallelSetAll(values, i -> new Random().nextDouble()); Arrays.parallelSort(values); Arrays.parallelPrefix(values, Double::sum); Przetwarzanie równoległe oraz λ i [] MetodaEfekt parallelPrefixPodmienia wartość elementu na wartość funkcji parallelSetAllUstawia wartości wg zadanego λ parallelSortSortuje elementy w tablicy

16 I18N oraz czas i data I18N: Umiędzynarodowienie ThreeTen: Czas dla komputera i człowieka

17  Prostota  Płynność  Niezmienność  Rozszerzalność JSR 310: Date-Time API PrefixUse ofZazwyczaj walidacja fromKonwersja do daty/czasu parseKonwersja z daty/czasu do docelowej klasy formatKonwersja na string – w zadanym formacie getPobranie części np. godziny z obiektu czasu isSprawdzenie stanu withUtworzenie kopii z zmienioną jedną z „wartości” plusDodanie czasu minusOdjęcie czasu toKonwersja na inny typ atPołączenie obiektów

18 System.out.printf("Aktualna data i czas: %s%n", LocalDateTime.now()); System.out.printf("1 lutego :10: %s%n", LocalDateTime.of(2001, Month.FEBRUARY, 1, 21, 10)); System.out.printf("Aktualna data i czas: (z Instant): %s%n", LocalDateTime.ofInstant(Instant.now(), ZoneId.systemDefault())); System.out.printf("Za 6 miesiące będzie: %s%n", LocalDateTime.now().plusMonths(6)); DateTimeFormatter format = DateTimeFormatter.ofPattern("MMM d yyyy HH:mm"); System.out.printf("6 miesięcy temu było: %s%n", LocalDateTime.now().minusMonths(6).format(format)); JSR 310: Date-Time API – przykład I

19 Instant t1, t2; t1 = Instant.now(); System.in.read(); t2 = Instant.now(); Duration timeBeetwen = Duration.between(t1, t2); System.out.println("Zmierzony czas: " + timeBeetwen); long timeBeetwen2 = ChronoUnit.MILLIS.between(t1,t2); long timeBeetwen3 = ChronoUnit.SECONDS.between(t1,t2); long timeBeetwen4 = ChronoUnit.HOURS.between(t1,t2); System.out.println("Zmierzony czas: " + timeBeetwen2 + " milisekund."); System.out.println("Zmierzony czas: " + timeBeetwen3 + " sekund."); System.out.println("Zmierzony czas: " + timeBeetwen4 + " godzin."); JSR 310: Date-Time API – przykład II

20 LocalDate today = LocalDate.now(); LocalDate birthday = LocalDate.of(1983, Month.JANUARY, 29); LocalDate nextBirthday = birthday.withYear(today.getYear()); if (nextBirthday.isBefore(today) || nextBirthday.isEqual(today)) { nextBirthday = nextBirthday.plusYears(1); } Period toNextBirthday = Period.between(today, nextBirthday); System.out.printf("Do następnych urodzin pozostało: %s miesięcy %s dni %n", toNextBirthday.getMonths(),toNextBirthday.getDays()); JSR 310: Date-Time API – przykład III

21  Zapatrzenie w MacromediaAdobe Flash  FXML and Scene Builder  WebKit – przeglądarka wewnątrz apletu?  Grafika 2D i 3D  SWING wewnątrz Java FX  Canvas API  Drukowanie  Rich Text  Akceleracja sprzętowa  Stremowanie mediów  CSS Java FX 2.x – Lepszy SWING?

22  JavaScript w Javie ?  Java SE 6 – Rhino 1.6R2  Java SE 7 – Rhino 1.7R3  Java SE 8 – Nashorn Bardziej Java niż Script? 11 grudnia lipca marca 2014

23 var Button = javafx.scene.control.Button; var StackPane = javafx.scene.layout.StackPane; var Scene = javafx.scene.Scene; function start(primaryStage) { primaryStage.title = "Hello World!"; var button = new Button(); button.text = "'Hello World'"; button.onAction = function() print("Hello World!"); var root = new StackPane(); root.children.add(button); primaryStage.scene = new Scene(root, 300, 250); primaryStage.show(); } JavaFX & Nashorn - przykład

24 Pytania ?

25 DZIĘKUJĘ ZA UWAGĘ


Pobierz ppt "Java 8 Co nowego w Javie 8 SE Błażej Karwowski.  Wyrażenia i inne nowości w języku  Zmiany w kolekcjach  =cześnie  Kilka słów o bezpieczeństwie "

Podobne prezentacje


Reklamy Google