SlideShare une entreprise Scribd logo
1  sur  17
Télécharger pour lire hors ligne
Nouveautés Java 8
Geek Time - Janvier 2017
Abdelhakim WAHAB
Consultant - OLBATI
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
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.
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
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!");
}
}
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
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!");
}
}
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}
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());
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)
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));
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();
}
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
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());
OLBATI - Geek Time - Janvier 2017 15
Autres nouveautés
● StringJoiner
● String.join
● Collectors
● Optional
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();
OLBATI - Geek Time - Janvier 2017 17
Thanks!
Any questions?
abdelhakim.wahab@olbati.com

Contenu connexe

En vedette

Geek Time Janvier 2017 : Quiz Java
Geek Time Janvier 2017 : Quiz JavaGeek Time Janvier 2017 : Quiz Java
Geek Time Janvier 2017 : Quiz JavaOLBATI
 
Geek Time September 2016 : Coding Dojo - Working on Legacy Code
Geek Time September 2016 : Coding Dojo - Working on Legacy CodeGeek Time September 2016 : Coding Dojo - Working on Legacy Code
Geek Time September 2016 : Coding Dojo - Working on Legacy CodeOLBATI
 
Geek Time Novembre 2016 : Cucumber
Geek Time Novembre 2016 : CucumberGeek Time Novembre 2016 : Cucumber
Geek Time Novembre 2016 : CucumberOLBATI
 
Geek Time Novembre 2016 : Quiz
Geek Time Novembre 2016 : QuizGeek Time Novembre 2016 : Quiz
Geek Time Novembre 2016 : QuizOLBATI
 
Geek Time October 2016 : Coding Dojo - Calisthenics Objects
Geek Time October 2016 : Coding Dojo - Calisthenics ObjectsGeek Time October 2016 : Coding Dojo - Calisthenics Objects
Geek Time October 2016 : Coding Dojo - Calisthenics ObjectsOLBATI
 
Biz and finance quiz Xavier's Management Society Fest 2017
Biz and finance quiz Xavier's Management Society Fest 2017Biz and finance quiz Xavier's Management Society Fest 2017
Biz and finance quiz Xavier's Management Society Fest 2017Aakash Roy
 
Bazzinga Environment quiz 2017 finals with answers
Bazzinga Environment quiz 2017 finals with answersBazzinga Environment quiz 2017 finals with answers
Bazzinga Environment quiz 2017 finals with answerszakir husain delhi college
 
Visual CV - based on a timeline
Visual CV - based on a timelineVisual CV - based on a timeline
Visual CV - based on a timelinePeter King
 
Bharati College Logo Quiz Finals
Bharati College Logo Quiz FinalsBharati College Logo Quiz Finals
Bharati College Logo Quiz FinalsAbhishek Mishra
 
Anandotsava 2017, NMAMIT, Nitte General Quiz Finals
Anandotsava 2017, NMAMIT, Nitte General Quiz FinalsAnandotsava 2017, NMAMIT, Nitte General Quiz Finals
Anandotsava 2017, NMAMIT, Nitte General Quiz FinalsDhanraj B
 
Saahitya Science Fiction and Fantasy Quiz 2017 - Finals
Saahitya Science Fiction and Fantasy Quiz 2017 - FinalsSaahitya Science Fiction and Fantasy Quiz 2017 - Finals
Saahitya Science Fiction and Fantasy Quiz 2017 - FinalsVishal Katariya
 
Biz-Tech Quiz Set 2017
Biz-Tech Quiz Set 2017Biz-Tech Quiz Set 2017
Biz-Tech Quiz Set 2017Suvam Palo
 

En vedette (16)

Geek Time Janvier 2017 : Quiz Java
Geek Time Janvier 2017 : Quiz JavaGeek Time Janvier 2017 : Quiz Java
Geek Time Janvier 2017 : Quiz Java
 
Geek Time September 2016 : Coding Dojo - Working on Legacy Code
Geek Time September 2016 : Coding Dojo - Working on Legacy CodeGeek Time September 2016 : Coding Dojo - Working on Legacy Code
Geek Time September 2016 : Coding Dojo - Working on Legacy Code
 
Geek Time Novembre 2016 : Cucumber
Geek Time Novembre 2016 : CucumberGeek Time Novembre 2016 : Cucumber
Geek Time Novembre 2016 : Cucumber
 
Geek Time Novembre 2016 : Quiz
Geek Time Novembre 2016 : QuizGeek Time Novembre 2016 : Quiz
Geek Time Novembre 2016 : Quiz
 
Geek Time October 2016 : Coding Dojo - Calisthenics Objects
Geek Time October 2016 : Coding Dojo - Calisthenics ObjectsGeek Time October 2016 : Coding Dojo - Calisthenics Objects
Geek Time October 2016 : Coding Dojo - Calisthenics Objects
 
Biz and finance quiz Xavier's Management Society Fest 2017
Biz and finance quiz Xavier's Management Society Fest 2017Biz and finance quiz Xavier's Management Society Fest 2017
Biz and finance quiz Xavier's Management Society Fest 2017
 
Logo quiz
Logo quizLogo quiz
Logo quiz
 
Bazzinga Environment quiz 2017 finals with answers
Bazzinga Environment quiz 2017 finals with answersBazzinga Environment quiz 2017 finals with answers
Bazzinga Environment quiz 2017 finals with answers
 
Visual CV - based on a timeline
Visual CV - based on a timelineVisual CV - based on a timeline
Visual CV - based on a timeline
 
TSL Quiz 2017
TSL Quiz 2017TSL Quiz 2017
TSL Quiz 2017
 
Business Quiz
Business QuizBusiness Quiz
Business Quiz
 
Bharati College Logo Quiz Finals
Bharati College Logo Quiz FinalsBharati College Logo Quiz Finals
Bharati College Logo Quiz Finals
 
Anandotsava 2017, NMAMIT, Nitte General Quiz Finals
Anandotsava 2017, NMAMIT, Nitte General Quiz FinalsAnandotsava 2017, NMAMIT, Nitte General Quiz Finals
Anandotsava 2017, NMAMIT, Nitte General Quiz Finals
 
Logo quiz
Logo quizLogo quiz
Logo quiz
 
Saahitya Science Fiction and Fantasy Quiz 2017 - Finals
Saahitya Science Fiction and Fantasy Quiz 2017 - FinalsSaahitya Science Fiction and Fantasy Quiz 2017 - Finals
Saahitya Science Fiction and Fantasy Quiz 2017 - Finals
 
Biz-Tech Quiz Set 2017
Biz-Tech Quiz Set 2017Biz-Tech Quiz Set 2017
Biz-Tech Quiz Set 2017
 

Similaire à Geek Time Janvier 2017 : Java 8

201303 - Java8
201303 - Java8201303 - Java8
201303 - Java8lyonjug
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovyguest6e3bed
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation GroovyJS Bournival
 
Introduction au langage Go
Introduction au langage GoIntroduction au langage Go
Introduction au langage GoSylvain Wallez
 
Big Data Viz (and much more!) with Apache Zeppelin
Big Data Viz (and much more!) with Apache ZeppelinBig Data Viz (and much more!) with Apache Zeppelin
Big Data Viz (and much more!) with Apache ZeppelinBruno Bonnin
 
JUS 2011 - Manipulation de champs avec SALOME
JUS 2011 - Manipulation de champs avec SALOMEJUS 2011 - Manipulation de champs avec SALOME
JUS 2011 - Manipulation de champs avec SALOMEOpenCascade
 
Java 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambdaJava 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambdaCh'ti JUG
 
Les nouveautés du Framework .NET 4.5
Les nouveautés du Framework .NET 4.5Les nouveautés du Framework .NET 4.5
Les nouveautés du Framework .NET 4.5Microsoft
 
Entity_framework_db first
Entity_framework_db firstEntity_framework_db first
Entity_framework_db firstZineb ELGARRAI
 
Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017Jean-Michel Doudoux
 
Java 8-streams-collectors-patterns
Java 8-streams-collectors-patternsJava 8-streams-collectors-patterns
Java 8-streams-collectors-patternsJosé Paumard
 
Java 8 - interfaces
Java 8 - interfacesJava 8 - interfaces
Java 8 - interfacesFranck SIMON
 
De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)Restlet
 
Environnements & Développements
Environnements & DéveloppementsEnvironnements & Développements
Environnements & DéveloppementsPaulin CHOUDJA
 
Diaporama du sfPot Lillois du 20 mars 2014
Diaporama du sfPot Lillois du 20 mars 2014Diaporama du sfPot Lillois du 20 mars 2014
Diaporama du sfPot Lillois du 20 mars 2014Les-Tilleuls.coop
 
code4lib 2011 : choses vues et entendues par l'ABES
code4lib 2011 : choses vues et entendues par l'ABEScode4lib 2011 : choses vues et entendues par l'ABES
code4lib 2011 : choses vues et entendues par l'ABESABES
 
TypeScript for dummies
TypeScript for dummiesTypeScript for dummies
TypeScript for dummiesMicrosoft
 

Similaire à Geek Time Janvier 2017 : Java 8 (20)

201303 - Java8
201303 - Java8201303 - Java8
201303 - Java8
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Introduction au langage Go
Introduction au langage GoIntroduction au langage Go
Introduction au langage Go
 
Big Data Viz (and much more!) with Apache Zeppelin
Big Data Viz (and much more!) with Apache ZeppelinBig Data Viz (and much more!) with Apache Zeppelin
Big Data Viz (and much more!) with Apache Zeppelin
 
Dynamic Languages
Dynamic LanguagesDynamic Languages
Dynamic Languages
 
JUS 2011 - Manipulation de champs avec SALOME
JUS 2011 - Manipulation de champs avec SALOMEJUS 2011 - Manipulation de champs avec SALOME
JUS 2011 - Manipulation de champs avec SALOME
 
Java 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambdaJava 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambda
 
Les nouveautés du Framework .NET 4.5
Les nouveautés du Framework .NET 4.5Les nouveautés du Framework .NET 4.5
Les nouveautés du Framework .NET 4.5
 
Entity_framework_db first
Entity_framework_db firstEntity_framework_db first
Entity_framework_db first
 
Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017
 
Java 8-streams-collectors-patterns
Java 8-streams-collectors-patternsJava 8-streams-collectors-patterns
Java 8-streams-collectors-patterns
 
Nouveautés de java 8
Nouveautés de java 8Nouveautés de java 8
Nouveautés de java 8
 
Java 8 - interfaces
Java 8 - interfacesJava 8 - interfaces
Java 8 - interfaces
 
Drools
DroolsDrools
Drools
 
De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)
 
Environnements & Développements
Environnements & DéveloppementsEnvironnements & Développements
Environnements & Développements
 
Diaporama du sfPot Lillois du 20 mars 2014
Diaporama du sfPot Lillois du 20 mars 2014Diaporama du sfPot Lillois du 20 mars 2014
Diaporama du sfPot Lillois du 20 mars 2014
 
code4lib 2011 : choses vues et entendues par l'ABES
code4lib 2011 : choses vues et entendues par l'ABEScode4lib 2011 : choses vues et entendues par l'ABES
code4lib 2011 : choses vues et entendues par l'ABES
 
TypeScript for dummies
TypeScript for dummiesTypeScript for dummies
TypeScript for dummies
 

Plus de OLBATI

Geek Time Juillet 2017 : TDD coté Front/JS
Geek Time Juillet 2017 : TDD coté Front/JSGeek Time Juillet 2017 : TDD coté Front/JS
Geek Time Juillet 2017 : TDD coté Front/JSOLBATI
 
Geek Time Mai 2017 : Vue.js
Geek Time Mai 2017 : Vue.jsGeek Time Mai 2017 : Vue.js
Geek Time Mai 2017 : Vue.jsOLBATI
 
Geek Time Juin 2017 : Microservices Tracing
Geek Time Juin 2017 : Microservices TracingGeek Time Juin 2017 : Microservices Tracing
Geek Time Juin 2017 : Microservices TracingOLBATI
 
Geek Time Juin 2017 : GraphQL
Geek Time Juin 2017 : GraphQLGeek Time Juin 2017 : GraphQL
Geek Time Juin 2017 : GraphQLOLBATI
 
Geek Time September 2016 : JavaScript Linting Tools
Geek Time September 2016 : JavaScript Linting ToolsGeek Time September 2016 : JavaScript Linting Tools
Geek Time September 2016 : JavaScript Linting ToolsOLBATI
 
Geek Time Août 2016 : Docker
Geek Time Août 2016 : DockerGeek Time Août 2016 : Docker
Geek Time Août 2016 : DockerOLBATI
 
Geek Time Juin 2016 : Node.js
Geek Time Juin 2016 : Node.jsGeek Time Juin 2016 : Node.js
Geek Time Juin 2016 : Node.jsOLBATI
 
Geek Time Juin 2016 : React
Geek Time Juin 2016 : ReactGeek Time Juin 2016 : React
Geek Time Juin 2016 : ReactOLBATI
 

Plus de OLBATI (8)

Geek Time Juillet 2017 : TDD coté Front/JS
Geek Time Juillet 2017 : TDD coté Front/JSGeek Time Juillet 2017 : TDD coté Front/JS
Geek Time Juillet 2017 : TDD coté Front/JS
 
Geek Time Mai 2017 : Vue.js
Geek Time Mai 2017 : Vue.jsGeek Time Mai 2017 : Vue.js
Geek Time Mai 2017 : Vue.js
 
Geek Time Juin 2017 : Microservices Tracing
Geek Time Juin 2017 : Microservices TracingGeek Time Juin 2017 : Microservices Tracing
Geek Time Juin 2017 : Microservices Tracing
 
Geek Time Juin 2017 : GraphQL
Geek Time Juin 2017 : GraphQLGeek Time Juin 2017 : GraphQL
Geek Time Juin 2017 : GraphQL
 
Geek Time September 2016 : JavaScript Linting Tools
Geek Time September 2016 : JavaScript Linting ToolsGeek Time September 2016 : JavaScript Linting Tools
Geek Time September 2016 : JavaScript Linting Tools
 
Geek Time Août 2016 : Docker
Geek Time Août 2016 : DockerGeek Time Août 2016 : Docker
Geek Time Août 2016 : Docker
 
Geek Time Juin 2016 : Node.js
Geek Time Juin 2016 : Node.jsGeek Time Juin 2016 : Node.js
Geek Time Juin 2016 : Node.js
 
Geek Time Juin 2016 : React
Geek Time Juin 2016 : ReactGeek Time Juin 2016 : React
Geek Time Juin 2016 : React
 

Geek Time Janvier 2017 : Java 8

  • 1. Nouveautés Java 8 Geek Time - Janvier 2017 Abdelhakim WAHAB Consultant - OLBATI
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. OLBATI - Geek Time - Janvier 2017 15 Autres nouveautés ● StringJoiner ● String.join ● Collectors ● Optional
  • 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. OLBATI - Geek Time - Janvier 2017 17 Thanks! Any questions? abdelhakim.wahab@olbati.com