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.

Geek Time Janvier 2017 : Java 8

152 views

Published on

Introduction à Java 8
Par Abdelhakim WAHAB, Consultant OLBATI
Au Geek Time de Janvier 2017

Published in: Software
  • Be the first to comment

  • Be the first to like this

Geek Time Janvier 2017 : Java 8

  1. 1. Nouveautés Java 8 Geek Time - Janvier 2017 Abdelhakim WAHAB Consultant - OLBATI
  2. 2. OLBATI - Geek Time - Janvier 2017 2 Nouveautés Java 8 ● Introduction ● Les méthodes par defaut ● Les interfaces fonctionnelles ● Les expressions Lambda ● API Stream ● API Date ● A mentionner: Collectors, String, I/O, Optional
  3. 3. OLBATI - Geek Time - Janvier 2017 3 Introduction ● A la sortie de chaque version de java on n’a pas constaté une grande évolution. Mais avec la version 1.8, le changement était bien remarquable avec une orientation vers la programmation fonctionnelle. Mais, interessons nous sur les nouveautés du java 8 en général qui sont en relation.
  4. 4. OLBATI - Geek Time - Janvier 2017 4 Les méthodes par défaut ● Implémentation par défaut d’une méthode d’une interface ● Pour pouvoir évoluer l’interface sans tout casser
  5. 5. OLBATI - Geek Time - Janvier 2017 5 Exemple: interface Person { void sayGoodBye(); default void sayHello() { System.out.println("Hello there!"); } } class Test implements Person { @Override public void sayGoodBye() { System.out.println("Bye there!"); } }
  6. 6. OLBATI - Geek Time - Janvier 2017 6 Les interfaces fonctionnelles ● Connues avant sous le nom de Single Abstract Method interface ● Interface avec une seule méthode abstraite ● Peuvent être annotées par @FunctionalInterface ● Utiles pour les expressions lambda ● Des interfaces fonctionnelles prédéfinies dans: java.util.function
  7. 7. OLBATI - Geek Time - Janvier 2017 7 Exemples: @FunctionalInterface public interface Runnable { void run(); } public interface Person { void sayGoodBye(); default void sayHello() { System.out.println("Hello there!"); } }
  8. 8. OLBATI - Geek Time - Janvier 2017 8 Expressions Lambda ● peut être assimilée à une fonction anonyme ● ayant potentiellement accès au contexte du code appelant ● peuvent être affectées dans une interface fonctionnelle. Le code de l’expression lambda servira ainsi d’implémentation pour la méthode abstraite de l’interface ● (paramètres) -> code ou (paramètres) -> {code}
  9. 9. OLBATI - Geek Time - Janvier 2017 9 Exemples: Arrays.sort(testStrings, new Comparator<String>() { @Override public int compare(String s1, String s2) { return(s1.length() - s2.length()); } }); // Forme longue : Arrays.sort(testStrings, (String s1, String s2) -> { return s1.length() – s2.length(); }); // Forme courte (possible uniquement s’il n’y a qu’une instruction) : Arrays.sort(testStrings, (String s1, String s2) -> s1.length() – s2.length()); // Forme courte avec type implicite des paramètres // (le type est déduit par le compilateur via l’inférence) Arrays.sort(testStrings, (s1, s2) -> s1.length() – s2.length());
  10. 10. OLBATI - Geek Time - Janvier 2017 10 API Stream ● un flux de données que l'on peut manipuler à la volée ● peut être en mode séquentiel ou parallèle ● source de données peut être très variée (un tableau, une collection, I/O…) ● des opérations intermédiaires (filtrer, transformer, trier...) ● une opération terminale (recupération de résultat ou opération spécifique)
  11. 11. OLBATI - Geek Time - Janvier 2017 11 Exemple: Stream<Integer> number = Stream.of(1, 2, 3, 4, 5); List<Integer> result2 = number.filter(x -> x!=3).collect(Collectors.toList()); result2.parallelStream().forEach(x -> System.out.println(x));
  12. 12. OLBATI - Geek Time - Janvier 2017 12 Exemple: String fileName = "/tmp/lines.txt"; List<String> list = new ArrayList<>(); try (Stream<String> stream = Files.lines(Paths.get(fileName))) { list = stream .filter(line -> !line.startsWith("line3")) .map(String::toUpperCase) .collect(Collectors.toList()); } catch (IOException e) { e.printStackTrace(); }
  13. 13. OLBATI - Geek Time - Janvier 2017 13 API Date ● Toutes les classes centrales de l'API Date and Time sont immuables ● Les méthodes chaînables rendent le code plus lisible et elles sont aussi plus simples ● temps machine: java.time.Instant et java.time.Duration ● Les classes java.time.LocalDate, java.time.LocalTime et java.time.LocalDateTime représentent des dates et heures système sans indication du fuseau horaire. ● ZoneId, ZoneOffset, ZonedDateTime, et OffsetDateTime
  14. 14. OLBATI - Geek Time - Janvier 2017 14 Exemples: Assert.assertEquals("1970-01-01T00:00:00Z", Instant.EPOCH.toString()); final Instant instant = Instant.now(); Assert.assertTrue(localTime.isAfter(localTime2)); Assert.assertFalse(localTime.isBefore(localTime2)); Assert.assertEquals("12:25:25.45236", localTime.minusMinutes(10).toString()); Assert.assertEquals("17:35:25.452367943", localTime.plusHours(5).toString());
  15. 15. OLBATI - Geek Time - Janvier 2017 15 Autres nouveautés ● StringJoiner ● String.join ● Collectors ● Optional
  16. 16. OLBATI - Geek Time - Janvier 2017 16 Autres: StringJoiner sj = new StringJoiner("/", "prefix-", "-suffix"); sj.add("2016"); sj.add("02"); sj.add("26"); String result = sj.toString(); //prefix-2016/02/26-suffix List<String> list = Arrays.asList("java", "python", "nodejs", "ruby"); //java, python, nodejs, ruby String result = String.join(", ", list); //java | python | nodejs | ruby String result = list.stream().map(x -> x).collect(Collectors.joining(" | ")); Optional optionalCar = Optional.empty(); price = optionalCar.orElse( defaultCar ).getPrice();
  17. 17. OLBATI - Geek Time - Janvier 2017 17 Thanks! Any questions? abdelhakim.wahab@olbati.com

×