SlideShare une entreprise Scribd logo
1  sur  62
Télécharger pour lire hors ligne
Java 8
Java 8
“Java 8 a établi un chiffre record d’adoption.
L’adoption de Java SE 8 depuis son lancement est de 20%
supérieur à celui de Java SE 7 sur la même période
de temps.”
“56 Nouvelles fonctionnalités”
“Java 8 devrait ainsi avoir un impact au moins aussi
important que Java 5 à son époque “
“Les arrivées des lambdas, des méthodes par défaut, des
interfaces fonctionnelles et de Stream vont modifier en
profondeur le langage et donc l'écosystème Java
tout entier.”
“18 Mars 2014”
Qui suis-je ?
Stéphane Goumard
Consultant Java.
Arrow Group
#Big Data
#Spark
#Hadoop
#Java
#Architecture#Dev
#NoSql
#Spring #EAI
@José Paumard Université Paris13
@Remi Forax Université Paris13
#Scub Foundation@sgoumard
Lambdas, Streams et Collectors
- Pattern Iterator.
GOF (Gang Of Four)
- Lambdas (JSR 335) Introduction par l’
exemple.
Lambdas, Streams et Collectors
Design Pattern
Iterator
Programmation
Impérative,
verbeux
Lambdas, Streams et Collectors
Un langage déclaratif le SQL…..
select sum(age)
from Person
where age > 20
On Décrit le Résultat
Les détails
d'exécutions sont à
la charge du SGBD
Lambdas, Streams et Collectors
JDK 7 Un langage
Impératif, verbeux
JDK 8 Un langage
Déclaratif + lisible
JDK8 (Lambdas,
Stream et Collector)
Lambdas, Streams et Collectors
1 - Map (Mapping)
- Transformer une Liste d’un certain type en une autre de
même taille et d’un autre type.
2 - Filter (Filtrage)
- Transformer une Liste d’un certain type en une liste d’une
taille différente mais du même type.
3 - Reduce (Réduction)
- Agrégation des éléments d’une liste dans un seul
élément Ex : moyenne, somme, min, max
Map Filter Reduce
Pattern
Map/Filter/Reduce
JDK 7 Pattern
MapReFilter/Reduce.
Lambdas, Streams et Collectors
//Implémentassions d’une
Liste Custom
//Implémenter
List Custom
//Classe anonyme
trés “verbeux”
//Pattern Iterator Impératif
Avant JDK8.
Lambdas, Streams et Collectors
Attention : Mon étape de réduction doit être “Associatif”
Somme (Folding) :
(i1+i2) + i3 = i1 + (i2 + i3) => OK et // OK.
Somme des carrés (Folding) :
(i1*i1) + (i2*i2) + (i3*i3) != ((i1*i1)+(i2*i2))2 + (i3*i3);
=> NOK Résultat faux mais toujours identique.
en // NOK.
- Pattern Iterator Impératif
- Non Lazy, copie d’
ArrayList pas très
performants.
Lambdas, Streams et Collectors
mapper = new Mapper < Person, Integer > () {
public Integer map(Person person) {
return person.getAge();
}
}
mapper = (Person person) -> person.getAge()
public interface Mapper < T, V > {
public V map (T t);
}
le compilateur reconnaît cette expression
Lambdas comme une “implémentation” du
Mapper
// 1 Méthode
JDK8
JDK7
Lambdas, Streams et Collectors
Plus d’une ligne de Code :
Type de retour de méthode void :
Prends plus d’un argument :
Lambdas, Streams et Collectors
Person p = new Person(); //Référence sur une instance.
mapper = p::getAge
Random r = Math::random; //Référence statique.
r.get(); //Math.random()
“Références de Méthodes”
Pour le moment :
Une expression lambda et une autre façon plus
lisible d’écrire des instances de classes
anonymes.
Lambdas, Streams et Collectors
Lambdas, Streams et Collectors
Avec un peu d'entraînement le code deviens plus lisible :
Encore plus simple le type de paramètre implicite :
Lambdas, Streams et Collectors
- Possède 1 méthode.
- Annotation
@FunctionnalInterface pas
obligatoire mais permet de
valider les interfaces à la
compilation.
Lambdas, Streams et Collectors
Une expression
lambda n’est pas un
objet elle a pas une
identité propre.
43 Interfaces fonctionnelles dans le JDK 8.
Java.util.functions.*
● Supplier/Consumer
● Function / BiFunction
● Predicate / BiPredicate
En plus des versions construites sur les types
primitifs.
Lambdas, Streams et Collectors
Lambdas, Streams et Collectors
Un Supplier fournit un objet
Un Consumer consomme un
objet
Une Function prend un objet
et retourne un objet (Map)
Prend un objet et retourne
un boolean. (Filter)
il peut être inversé et composé des AND ou OR
Les Fonctions peuvent être chaînées et / ou composées.
Lambdas, Streams et Collectors
Retour sur mon projet exemple :
Implémenter le Pattern Map/Filter/Reduce sur
une collection pour calculer la somme des âges
des personnes qui ont plus de 20 ans.
Lambdas, Streams et Collectors
JDK 7 Pattern
MapReFilter/Reduce.
Lambdas, Streams et Collectors
//Implémentassions d’une
Liste Custom
//Implémenter
List Custom
//Classe anonyme
trés “verbeux”
//Pattern Iterator Impératif
Lambdas, Streams et Collectors
int sum = liste.map(personne -> personne.getAge())
.filter(age -> age> 20)
.reduce((age1, age2) -> age1 + age2);
JDK 8 Pattern MapReFilter/Reduce.
- Utiliser des Expressions Lambdas.
- Utiliser les Interfaces du JDK8.
- Pattern Iterator et Imperatif.
- Pas de Lazy Operations. /
allMatch
- Réduction impérative.
Lambdas, Streams et Collectors
JDK 8 Pattern MapReFilter/Reduce.
État :
On a besoin d’un nouveau concept pour traiter
les listes de grandes tailles en mode lazy et
également pouvoir déléguer l’application des
opérations sur les listes au JDK.
Lambdas, Streams et Collectors
Lambdas, Streams et Collectors
int sum = liste.map(personne -> personne.getAge())
.filter(age -> age> 20)
.reduce((age1, age2) -> age1 + age2);
int sum = liste.stream.map(
personne -> personne.getAge())
.filter(age -> age> 20)
.reduce((age1, age2) -> age1 + age2);
“Une nouvelle Interface sur l’API
Collection Stream”
Lambdas, Streams et Collectors
Une Nouvelle Méthode sur l’API Collection hum….
- Problème l’ensemble des
Collections “Custom”
développés ne Compile plus !
- On a besoin d’une nouvelle notion !
Interfaces par défaut Java 8
Lambdas, Streams et Collectors
- Mot clé default.
- Plus besoin d’implémenter.
Questions :
- classe Abstraite ? Non (Pas d’état, de variable)
- Héritage Multiple ? Oui type et impl mais pas d’état.
- Alors les conflits ? Oui mais Gérer avec des règles.
Lambdas, Streams et Collectors
Interfaces par défaut Java 8
- - Erreur de Compilation (dans l’IDE)
Lambdas, Streams et Collectors
Interfaces par défaut Java 8
- La Classe Gagne
Lambdas, Streams et Collectors
Interfaces par défaut Java 8
- Le plus spécifique gagne !
Lambdas, Streams et Collectors
Interfaces avec méthode “static” Java 8
Note : D'après Remi Forax cette possibilité existe
depuis les débuts dans le JDK, elle était simplement
bridée par le compilateur.
État :
On a besoin d’un nouveau concept pour traiter
les listes de grandes tailles en mode lazy et
également pouvoir déléguer l’application des
opérations sur les listes au JDK.
Lambdas, Streams et Collectors
Lambdas, Streams et Collectors
int sum = liste.stream.map(
personne -> personne.getAge())
.filter(age -> age> 20)
.reduce((age1, age2) -> age1 + age2);
On a besoin d’un nouveau concept pour traiter
les listes de grandes tailles en mode lazy et
également pouvoir déléguer l’application des
opérations sur les listes au JDK.
API Stream
Nouvelle Notion API Stream :
- C’est une interface paramétrée.
- Des interfaces pour les primitifs (IntStream..)
- Ne porte pas de donnée mais elle est
connectée à une source.
- Ne peut pas modifier sa source (//)
- Elle traite les opérations de façon lazy il va
falloir donc distinguer les opérations.
Lambdas, Streams et Collectors
Lambdas, Streams et Collectors
Création d’un Stream :
API Stream applique les opérations en Lazy :
● Deux types d'opérations (JavaDoc)
○ Les Opérations Intermédiaires. ex. map, filter.
○ Les Opérations terminales : ex. reduce. (1X)
Lambdas, Streams et Collectors
Lambdas, Streams et Collectors
API Stream applique les opérations en Lazy :
Opérations Intermédiaires
Opérations Terminales
Lambdas, Streams et Collectors
API Stream Parallèle :
Les Streams rendent les
opérations sur une
collection déclaratives
on peux donc facilement
déléguer la // a la JVM.
Lambdas, Streams et Collectors
Pas si simple…...
Le Temps n’est pas meilleur
sur le traitement // la cause :
la méthode limit est statefull.
Retour sur mon projet exemple :
Implémenter le Pattern Map/Filter/Reduce sur
une collection pour calculer la sommes des
âges des personnes qui ont plus de 20 ans.
Lambdas, Streams et Collectors
Lambda simplifie l’écriture. Stream permet de rendre
déclaratif les opérations en
mode Lazy sur les
Collections
int sum = liste.stream()
.map(person -> person.getAge())
.filter(age -> age > 20)
.reduce((age1,age2) -> age1 + age2);
Réduction simple.
La Réduction simple :
Lambdas, Streams et Collectors
Pas de méthode sum() sur un
Stream paramétré.
Par contre le IntStream
possède cette méthode.
La Réduction Élément neutre :
Lambdas, Streams et Collectors
Et si l’ensemble est vide ? Éléments neutre d’une Réduction est la
valeur retourné si l’ensemble est vide
Pour le sum c’est simple,
une valeur neutre d’une
somme d’un élément vide
est 0.
Pour le max ou le min
alors ? ben il n’existe
pas d'élément neutre
satisfaisant.
La Réduction Élément neutre le type Optional :
Lambdas, Streams et Collectors
C’est une manière de rendre la
main au développeur sur un
code déclaratif quand le
programme ne peut pas
déduire une valeur.
La Réduction Élément neutre le type Optional :
Lambdas, Streams et Collectors
Pattern pour gérer les types :
D’autre Types :
List < Personne > liste = new ArrayList<Personne>();
Optional<Integer> sum = liste.stream()
….. .sum();
System.out.println(sum);
=> // Pas de NullPointerException Optional.empty
Sur IntStream, LongStream….:
● average()
● sum().
● summaryStatistics()
La Réduction simple :
Lambdas, Streams et Collectors
Sur Stream < T > :
● reduce()
● anyMatch, allMatch, noneMatch.
● findFirst(), findAny()
Retour sur mon projet exemple :
Implémenter le Pattern Map/Filter/Reduce sur
une collection pour calculer la sommes des
âges des personnes qui ont plus de 20 ans.
Lambdas, Streams et Collectors
JDK 7 Pattern
MapReFilter/Reduce.
Lambdas, Streams et Collectors
//Implémentassions d’une
Liste Custom
//Implémenter
List Custom
//Classe anonyme
trés “verbeux”
//Pattern Iterator Impératif
Lambdas, Streams et Collectors
int sum = liste.map(personne -> personne.getAge())
.filter(age -> age> 20)
.reduce((age1, age2) -> age1 + age2);
JDK 8 Pattern MapReFilter/Reduce.
- Utiliser des Expressions Lambdas.
- Utiliser les Interfaces du JDK8.
- Pattern Iterator et Imperatif.
- Pas de Lazy Operations.
- Réduction impérative.
Lambdas, Streams et Collectors
JDK 8 Pattern MapReFilter/Reduce.
Lambdas, Streams et Collectors
int sum = liste.stream()
.mapToInt(person -> person.getAge())
.filter(age -> age > 20)
.sum();
JDK 8 Pattern MapReFilter/Reduce.
- Utiliser des Expressions Lambdas.
- Utiliser l’API Stream.
- Utiliser la réduction Simple.
● Réduction Mutable et l’API Collectors.
L’API Collectors est une boite à outils avec une
liste de réduction sur étagères. 37 Méthodes.
Les Réductions de l’API Collectors sont dit
mutables, elles définissent trois choses :
- Création du container.
- Comment ajouter un élément au container.
- Comment “merger” deux container en mode //.
Lambdas, Streams et Collectors
Lambdas, Streams et Collectors
Lambdas, Streams et Collectors
Réduction Mutable et l’API Collectors.
Lambdas, Streams et Collectors
La Méthode Mapping et l’introduction au downstream.
Réduction Mutable et l’API Collectors.
Une Fonction qui “map”
les éléments du Stream.
Downstream, un
“Collector” à appliqué aux
valeurs résultat du map…
(Chaînage possible)
Lambdas, Streams et Collectors
La Méthode groupingBy construit des tables de Hashage.
Réduction Mutable et l’API Collectors.
Le Mapper pour faire la clé
Downstream, l’opération à
appliquer sur les valeurs.
Lambdas, Streams et Collectors
La Méthode groupingBy construit des tables de Hashage.
Réduction Mutable et l’API Collectors.
Les Nouveautés Java 8
API Date java.util.time (JSR 310)
● La Nouvelle API est inspiré de la librairie java Joda-Time.
● Le But est de pallier aux défauts de Date et Calendar.
○ Immutabilité et Thread Safe.
○ Chaînage.
○ le mois "0" n'existe plus et le mois "1" correspond au mois de janvier.
○ Deux nouvelles notions de temps :
■ .Temps machine (un entier qui augmente depuis le 01/01/1970)
■ Temps humain (succession de champs ayant une unités année,
mois, jours, heures…)
○ Introduction de nouvelles notions Période, Instant, Durée.
Instant
Duration
ZonedDateTime
OffsetDateTime
LocalDateTime
Period
Intéropérabilité
TemporalAdjuter
Les Nouveautés Java 8
String en bref…..
String s = “bonjour”
IntStream s = s.chars(). map(String::toUpperCase).
forEach(System.out::print);
StringJoiner sj = new StringJoiner(",", “{“,”}”);
System.out.println(sj.add("one").add("two").
toString()); > {one,twho, three}
Les Nouveautés Java 8
Nio en bref…..
Stream < String > stream = Files.lines(path).filter(line -
> line.contains(“ERROR”) .findFirst()
.ifPresent(System.out::println); //AutoCloseable
//retourne les fichiers du répertoire.
Stream < Path > stream = Files.list(path);
//retourne les fichiers du sous arbre, profondeur.
Stream < Path > stream = Files.walk(path, 2);
Les Nouveautés Java 8
Et Encore….
“Api Concurrentes” => Stamped Lock, Concurrent Adders (Atomics)….
“Array.sort, Array.paralleSort” => Tri paralléle.
“Java Advanced Management Console” => Permettre de
contrôler la version de Java installés sur un Parck Informatique (Administrateur)
“MSI Enterprise JRE Installer” => Permettre l’installation et la
maintenance des JRE sur un parc informatique.
“Nashorm” => Nouveau moteur Javascript intégré dans le JDK (Quid du
Javascript coté serveur…)
“JVM” => Optimisation de la gestion de la mémoire supréssion du PermGen.
Fin, Merci, des Questions ?
L'horizon Java 8

Contenu connexe

Tendances

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
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieurFredy Fadel
 
Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6Julien CROUZET
 
Chapitre 2: String en Java
Chapitre 2:  String en JavaChapitre 2:  String en Java
Chapitre 2: String en JavaAziz Darouichi
 
Javascript pour les Développeurs WEB
Javascript pour les Développeurs WEBJavascript pour les Développeurs WEB
Javascript pour les Développeurs WEBAbbes Rharrab
 
De java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvementsDe java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvementsDidier Plaindoux
 
50 nouvelles choses que l'on peut faire avec Java 8
50 nouvelles choses que l'on peut faire avec Java 850 nouvelles choses que l'on peut faire avec Java 8
50 nouvelles choses que l'on peut faire avec Java 8José Paumard
 
Java 8 - collections et stream
Java 8 - collections et streamJava 8 - collections et stream
Java 8 - collections et streamFranck SIMON
 
Java 8-streams-collectors-patterns
Java 8-streams-collectors-patternsJava 8-streams-collectors-patterns
Java 8-streams-collectors-patternsJosé Paumard
 
Coat::Persistent at FPW2009
Coat::Persistent at FPW2009Coat::Persistent at FPW2009
Coat::Persistent at FPW2009Alexis Sukrieh
 
Tour d’horizon de scala
Tour d’horizon de scalaTour d’horizon de scala
Tour d’horizon de scalaBenoit Wilcox
 
Les fonctions lambdas en C++11 et C++14
Les fonctions lambdas en C++11 et C++14Les fonctions lambdas en C++11 et C++14
Les fonctions lambdas en C++11 et C++14Aurélien Regat-Barrel
 
Chapitre8: Collections et Enumerations En Java
Chapitre8: Collections et Enumerations En JavaChapitre8: Collections et Enumerations En Java
Chapitre8: Collections et Enumerations En JavaAziz Darouichi
 
Monitoring d'applications/environnements PHP: APM et Pinba
Monitoring d'applications/environnements PHP: APM et PinbaMonitoring d'applications/environnements PHP: APM et Pinba
Monitoring d'applications/environnements PHP: APM et PinbaPatrick Allaert
 
Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019Aziz Darouichi
 
L'API Collector dans tous ses états
L'API Collector dans tous ses étatsL'API Collector dans tous ses états
L'API Collector dans tous ses étatsJosé Paumard
 
Présentation (brève) de scala
Présentation (brève) de scalaPrésentation (brève) de scala
Présentation (brève) de scalaclem_simon
 

Tendances (20)

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
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieur
 
Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6
 
Chapitre 2: String en Java
Chapitre 2:  String en JavaChapitre 2:  String en Java
Chapitre 2: String en Java
 
Change mind about JS
Change mind about JSChange mind about JS
Change mind about JS
 
Javascript pour les Développeurs WEB
Javascript pour les Développeurs WEBJavascript pour les Développeurs WEB
Javascript pour les Développeurs WEB
 
De java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvementsDe java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvements
 
50 nouvelles choses que l'on peut faire avec Java 8
50 nouvelles choses que l'on peut faire avec Java 850 nouvelles choses que l'on peut faire avec Java 8
50 nouvelles choses que l'on peut faire avec Java 8
 
Java 8 - collections et stream
Java 8 - collections et streamJava 8 - collections et stream
Java 8 - collections et stream
 
Programmation Fonctionnelle
Programmation FonctionnelleProgrammation Fonctionnelle
Programmation Fonctionnelle
 
Java 8-streams-collectors-patterns
Java 8-streams-collectors-patternsJava 8-streams-collectors-patterns
Java 8-streams-collectors-patterns
 
Coat::Persistent at FPW2009
Coat::Persistent at FPW2009Coat::Persistent at FPW2009
Coat::Persistent at FPW2009
 
Tour d’horizon de scala
Tour d’horizon de scalaTour d’horizon de scala
Tour d’horizon de scala
 
Les fonctions lambdas en C++11 et C++14
Les fonctions lambdas en C++11 et C++14Les fonctions lambdas en C++11 et C++14
Les fonctions lambdas en C++11 et C++14
 
Chapitre8: Collections et Enumerations En Java
Chapitre8: Collections et Enumerations En JavaChapitre8: Collections et Enumerations En Java
Chapitre8: Collections et Enumerations En Java
 
Monitoring d'applications/environnements PHP: APM et Pinba
Monitoring d'applications/environnements PHP: APM et PinbaMonitoring d'applications/environnements PHP: APM et Pinba
Monitoring d'applications/environnements PHP: APM et Pinba
 
Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019
 
L'API Collector dans tous ses états
L'API Collector dans tous ses étatsL'API Collector dans tous ses états
L'API Collector dans tous ses états
 
Présentation (brève) de scala
Présentation (brève) de scalaPrésentation (brève) de scala
Présentation (brève) de scala
 
C# 7 - Nouveautés
C# 7 - NouveautésC# 7 - Nouveautés
C# 7 - Nouveautés
 

En vedette

Aracena Octubre09 - jamon iberico
Aracena Octubre09 - jamon ibericoAracena Octubre09 - jamon iberico
Aracena Octubre09 - jamon ibericoLewis & Carroll
 
‘Begun is Two-Thirds Done’: Giving Flexible Learners A Head Start With A Suit...
‘Begun is Two-Thirds Done’: Giving Flexible Learners A Head Start With A Suit...‘Begun is Two-Thirds Done’: Giving Flexible Learners A Head Start With A Suit...
‘Begun is Two-Thirds Done’: Giving Flexible Learners A Head Start With A Suit...Mark Brown
 
IntroduçãO1
IntroduçãO1IntroduçãO1
IntroduçãO1rogerio
 
Slidesagentesbiolgicos 121030123113-phpapp02
Slidesagentesbiolgicos 121030123113-phpapp02Slidesagentesbiolgicos 121030123113-phpapp02
Slidesagentesbiolgicos 121030123113-phpapp02Jupira Silva
 
Howard gardner apr
Howard gardner aprHoward gardner apr
Howard gardner aprMusicah
 
O Scratch no ensino da programação (Softciências)
O Scratch no ensino da programação (Softciências)O Scratch no ensino da programação (Softciências)
O Scratch no ensino da programação (Softciências)João Sá
 
Special beds for positioning client
Special beds for positioning client Special beds for positioning client
Special beds for positioning client Carmela Domocmat
 

En vedette (20)

Aracena Octubre09 - jamon iberico
Aracena Octubre09 - jamon ibericoAracena Octubre09 - jamon iberico
Aracena Octubre09 - jamon iberico
 
‘Begun is Two-Thirds Done’: Giving Flexible Learners A Head Start With A Suit...
‘Begun is Two-Thirds Done’: Giving Flexible Learners A Head Start With A Suit...‘Begun is Two-Thirds Done’: Giving Flexible Learners A Head Start With A Suit...
‘Begun is Two-Thirds Done’: Giving Flexible Learners A Head Start With A Suit...
 
Insider17
Insider17Insider17
Insider17
 
Almería en corto 2011
Almería en corto 2011 Almería en corto 2011
Almería en corto 2011
 
Securitarian
SecuritarianSecuritarian
Securitarian
 
IntroduçãO1
IntroduçãO1IntroduçãO1
IntroduçãO1
 
10y ict research-190814
10y ict research-19081410y ict research-190814
10y ict research-190814
 
Celulares
CelularesCelulares
Celulares
 
Honey pots
Honey potsHoney pots
Honey pots
 
Slidesagentesbiolgicos 121030123113-phpapp02
Slidesagentesbiolgicos 121030123113-phpapp02Slidesagentesbiolgicos 121030123113-phpapp02
Slidesagentesbiolgicos 121030123113-phpapp02
 
Gobierno electronico
Gobierno electronicoGobierno electronico
Gobierno electronico
 
Telefonía móvil
Telefonía móvilTelefonía móvil
Telefonía móvil
 
Augumented Reality trends
Augumented Reality trendsAugumented Reality trends
Augumented Reality trends
 
Howard gardner apr
Howard gardner aprHoward gardner apr
Howard gardner apr
 
Actividad 2 (1)
Actividad 2 (1)Actividad 2 (1)
Actividad 2 (1)
 
O Scratch no ensino da programação (Softciências)
O Scratch no ensino da programação (Softciências)O Scratch no ensino da programação (Softciências)
O Scratch no ensino da programação (Softciências)
 
Observaciones y entrevistas1
Observaciones y entrevistas1Observaciones y entrevistas1
Observaciones y entrevistas1
 
Tec junho 2013
Tec junho 2013Tec junho 2013
Tec junho 2013
 
Special beds for positioning client
Special beds for positioning client Special beds for positioning client
Special beds for positioning client
 
Luz
LuzLuz
Luz
 

Similaire à Techday Arrow Group: Java 8

Spark RDD : Transformations & Actions
Spark RDD : Transformations & ActionsSpark RDD : Transformations & Actions
Spark RDD : Transformations & ActionsMICHRAFY MUSTAFA
 
Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)Jérôme Tamborini
 
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
 
Geek Time Janvier 2017 : Java 8
Geek Time Janvier 2017 : Java 8Geek Time Janvier 2017 : Java 8
Geek Time Janvier 2017 : Java 8OLBATI
 
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
 
Partie1 TypeScript
Partie1 TypeScriptPartie1 TypeScript
Partie1 TypeScriptHabib Ayad
 
Enib cours c.a.i. web - séance #5 : scala play! framework
Enib   cours c.a.i. web - séance #5 : scala play! frameworkEnib   cours c.a.i. web - séance #5 : scala play! framework
Enib cours c.a.i. web - séance #5 : scala play! frameworkHoracio Gonzalez
 
Les concepts de la programmation fonctionnelle illustrés avec java 8
Les concepts de la programmation fonctionnelle illustrés avec java 8Les concepts de la programmation fonctionnelle illustrés avec java 8
Les concepts de la programmation fonctionnelle illustrés avec java 8Yannick Chartois
 
Chapitre 11: Expression Lambda et Référence de méthode en Java
Chapitre 11: Expression Lambda et Référence de méthode en JavaChapitre 11: Expression Lambda et Référence de méthode en Java
Chapitre 11: Expression Lambda et Référence de méthode en JavaAziz Darouichi
 
Cours Big Data Chap4 - Spark
Cours Big Data Chap4 - SparkCours Big Data Chap4 - Spark
Cours Big Data Chap4 - SparkAmal Abid
 
SSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQLSSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQLHervé Leclerc
 
Base NoSql et Python
Base NoSql et PythonBase NoSql et Python
Base NoSql et Pythonyboussard
 
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquéeDéveloppement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquéeMustapha Tachouct
 

Similaire à Techday Arrow Group: Java 8 (20)

expression lambda
expression lambdaexpression lambda
expression lambda
 
Nouveautés de java 8
Nouveautés de java 8Nouveautés de java 8
Nouveautés de java 8
 
Spark RDD : Transformations & Actions
Spark RDD : Transformations & ActionsSpark RDD : Transformations & Actions
Spark RDD : Transformations & Actions
 
Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)
 
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
 
Geek Time Janvier 2017 : Java 8
Geek Time Janvier 2017 : Java 8Geek Time Janvier 2017 : Java 8
Geek Time Janvier 2017 : Java 8
 
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
 
Partie1 TypeScript
Partie1 TypeScriptPartie1 TypeScript
Partie1 TypeScript
 
L'avenir de LAMP
L'avenir de LAMPL'avenir de LAMP
L'avenir de LAMP
 
Enib cours c.a.i. web - séance #5 : scala play! framework
Enib   cours c.a.i. web - séance #5 : scala play! frameworkEnib   cours c.a.i. web - séance #5 : scala play! framework
Enib cours c.a.i. web - séance #5 : scala play! framework
 
JAVA8, créer votre future
JAVA8, créer votre futureJAVA8, créer votre future
JAVA8, créer votre future
 
Les concepts de la programmation fonctionnelle illustrés avec java 8
Les concepts de la programmation fonctionnelle illustrés avec java 8Les concepts de la programmation fonctionnelle illustrés avec java 8
Les concepts de la programmation fonctionnelle illustrés avec java 8
 
Java 8 - lambda
Java 8 - lambdaJava 8 - lambda
Java 8 - lambda
 
Chapitre 11: Expression Lambda et Référence de méthode en Java
Chapitre 11: Expression Lambda et Référence de méthode en JavaChapitre 11: Expression Lambda et Référence de méthode en Java
Chapitre 11: Expression Lambda et Référence de méthode en Java
 
spark_intro_1208
spark_intro_1208spark_intro_1208
spark_intro_1208
 
Cours Big Data Chap4 - Spark
Cours Big Data Chap4 - SparkCours Big Data Chap4 - Spark
Cours Big Data Chap4 - Spark
 
SSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQLSSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQL
 
Base NoSql et Python
Base NoSql et PythonBase NoSql et Python
Base NoSql et Python
 
Tp1 matlab
Tp1 matlab Tp1 matlab
Tp1 matlab
 
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquéeDéveloppement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
 

Plus de Arrow Group

Techday Arrow Group: Hadoop & le Big Data
Techday Arrow Group: Hadoop & le Big DataTechday Arrow Group: Hadoop & le Big Data
Techday Arrow Group: Hadoop & le Big DataArrow Group
 
Arrow Group: Techday Big Data - Etat et Enjeu pour l'Assurance
Arrow Group: Techday Big Data - Etat et Enjeu pour l'AssuranceArrow Group: Techday Big Data - Etat et Enjeu pour l'Assurance
Arrow Group: Techday Big Data - Etat et Enjeu pour l'AssuranceArrow Group
 
Techday Arrow Group: Delphi Xe5 Android - une approche par la 3D
Techday Arrow Group: Delphi Xe5 Android - une approche par la 3DTechday Arrow Group: Delphi Xe5 Android - une approche par la 3D
Techday Arrow Group: Delphi Xe5 Android - une approche par la 3DArrow Group
 
Formation html5 css3 java script
Formation html5 css3 java scriptFormation html5 css3 java script
Formation html5 css3 java scriptArrow Group
 
Arrow Group: nos événements et recrutements en février / mars 2015
Arrow Group: nos événements et recrutements en février / mars 2015Arrow Group: nos événements et recrutements en février / mars 2015
Arrow Group: nos événements et recrutements en février / mars 2015Arrow Group
 
Arrow Institute: petit-déjeuner thématique autour de Bitcoin - Qu’est-ce que ...
Arrow Institute: petit-déjeuner thématique autour de Bitcoin - Qu’est-ce que ...Arrow Institute: petit-déjeuner thématique autour de Bitcoin - Qu’est-ce que ...
Arrow Institute: petit-déjeuner thématique autour de Bitcoin - Qu’est-ce que ...Arrow Group
 

Plus de Arrow Group (7)

Techday Arrow Group: Hadoop & le Big Data
Techday Arrow Group: Hadoop & le Big DataTechday Arrow Group: Hadoop & le Big Data
Techday Arrow Group: Hadoop & le Big Data
 
Arrow Group: Techday Big Data - Etat et Enjeu pour l'Assurance
Arrow Group: Techday Big Data - Etat et Enjeu pour l'AssuranceArrow Group: Techday Big Data - Etat et Enjeu pour l'Assurance
Arrow Group: Techday Big Data - Etat et Enjeu pour l'Assurance
 
Techday Arrow Group: Delphi Xe5 Android - une approche par la 3D
Techday Arrow Group: Delphi Xe5 Android - une approche par la 3DTechday Arrow Group: Delphi Xe5 Android - une approche par la 3D
Techday Arrow Group: Delphi Xe5 Android - une approche par la 3D
 
Advanced html5
Advanced html5Advanced html5
Advanced html5
 
Formation html5 css3 java script
Formation html5 css3 java scriptFormation html5 css3 java script
Formation html5 css3 java script
 
Arrow Group: nos événements et recrutements en février / mars 2015
Arrow Group: nos événements et recrutements en février / mars 2015Arrow Group: nos événements et recrutements en février / mars 2015
Arrow Group: nos événements et recrutements en février / mars 2015
 
Arrow Institute: petit-déjeuner thématique autour de Bitcoin - Qu’est-ce que ...
Arrow Institute: petit-déjeuner thématique autour de Bitcoin - Qu’est-ce que ...Arrow Institute: petit-déjeuner thématique autour de Bitcoin - Qu’est-ce que ...
Arrow Institute: petit-déjeuner thématique autour de Bitcoin - Qu’est-ce que ...
 

Techday Arrow Group: Java 8

  • 2. Java 8 “Java 8 a établi un chiffre record d’adoption. L’adoption de Java SE 8 depuis son lancement est de 20% supérieur à celui de Java SE 7 sur la même période de temps.” “56 Nouvelles fonctionnalités” “Java 8 devrait ainsi avoir un impact au moins aussi important que Java 5 à son époque “ “Les arrivées des lambdas, des méthodes par défaut, des interfaces fonctionnelles et de Stream vont modifier en profondeur le langage et donc l'écosystème Java tout entier.” “18 Mars 2014”
  • 3. Qui suis-je ? Stéphane Goumard Consultant Java. Arrow Group #Big Data #Spark #Hadoop #Java #Architecture#Dev #NoSql #Spring #EAI @José Paumard Université Paris13 @Remi Forax Université Paris13 #Scub Foundation@sgoumard
  • 4. Lambdas, Streams et Collectors - Pattern Iterator. GOF (Gang Of Four)
  • 5. - Lambdas (JSR 335) Introduction par l’ exemple. Lambdas, Streams et Collectors Design Pattern Iterator Programmation Impérative, verbeux
  • 6. Lambdas, Streams et Collectors Un langage déclaratif le SQL….. select sum(age) from Person where age > 20 On Décrit le Résultat Les détails d'exécutions sont à la charge du SGBD
  • 7. Lambdas, Streams et Collectors JDK 7 Un langage Impératif, verbeux JDK 8 Un langage Déclaratif + lisible JDK8 (Lambdas, Stream et Collector)
  • 8. Lambdas, Streams et Collectors 1 - Map (Mapping) - Transformer une Liste d’un certain type en une autre de même taille et d’un autre type. 2 - Filter (Filtrage) - Transformer une Liste d’un certain type en une liste d’une taille différente mais du même type. 3 - Reduce (Réduction) - Agrégation des éléments d’une liste dans un seul élément Ex : moyenne, somme, min, max Map Filter Reduce Pattern Map/Filter/Reduce
  • 9. JDK 7 Pattern MapReFilter/Reduce. Lambdas, Streams et Collectors //Implémentassions d’une Liste Custom //Implémenter List Custom //Classe anonyme trés “verbeux” //Pattern Iterator Impératif
  • 10. Avant JDK8. Lambdas, Streams et Collectors Attention : Mon étape de réduction doit être “Associatif” Somme (Folding) : (i1+i2) + i3 = i1 + (i2 + i3) => OK et // OK. Somme des carrés (Folding) : (i1*i1) + (i2*i2) + (i3*i3) != ((i1*i1)+(i2*i2))2 + (i3*i3); => NOK Résultat faux mais toujours identique. en // NOK. - Pattern Iterator Impératif - Non Lazy, copie d’ ArrayList pas très performants.
  • 11. Lambdas, Streams et Collectors mapper = new Mapper < Person, Integer > () { public Integer map(Person person) { return person.getAge(); } } mapper = (Person person) -> person.getAge() public interface Mapper < T, V > { public V map (T t); } le compilateur reconnaît cette expression Lambdas comme une “implémentation” du Mapper // 1 Méthode JDK8 JDK7
  • 12. Lambdas, Streams et Collectors Plus d’une ligne de Code : Type de retour de méthode void : Prends plus d’un argument :
  • 13. Lambdas, Streams et Collectors Person p = new Person(); //Référence sur une instance. mapper = p::getAge Random r = Math::random; //Référence statique. r.get(); //Math.random() “Références de Méthodes”
  • 14. Pour le moment : Une expression lambda et une autre façon plus lisible d’écrire des instances de classes anonymes. Lambdas, Streams et Collectors
  • 15. Lambdas, Streams et Collectors Avec un peu d'entraînement le code deviens plus lisible : Encore plus simple le type de paramètre implicite :
  • 16. Lambdas, Streams et Collectors - Possède 1 méthode. - Annotation @FunctionnalInterface pas obligatoire mais permet de valider les interfaces à la compilation.
  • 17. Lambdas, Streams et Collectors Une expression lambda n’est pas un objet elle a pas une identité propre.
  • 18. 43 Interfaces fonctionnelles dans le JDK 8. Java.util.functions.* ● Supplier/Consumer ● Function / BiFunction ● Predicate / BiPredicate En plus des versions construites sur les types primitifs. Lambdas, Streams et Collectors
  • 19. Lambdas, Streams et Collectors Un Supplier fournit un objet Un Consumer consomme un objet
  • 20. Une Function prend un objet et retourne un objet (Map) Prend un objet et retourne un boolean. (Filter) il peut être inversé et composé des AND ou OR Les Fonctions peuvent être chaînées et / ou composées. Lambdas, Streams et Collectors
  • 21. Retour sur mon projet exemple : Implémenter le Pattern Map/Filter/Reduce sur une collection pour calculer la somme des âges des personnes qui ont plus de 20 ans. Lambdas, Streams et Collectors
  • 22. JDK 7 Pattern MapReFilter/Reduce. Lambdas, Streams et Collectors //Implémentassions d’une Liste Custom //Implémenter List Custom //Classe anonyme trés “verbeux” //Pattern Iterator Impératif
  • 23. Lambdas, Streams et Collectors int sum = liste.map(personne -> personne.getAge()) .filter(age -> age> 20) .reduce((age1, age2) -> age1 + age2); JDK 8 Pattern MapReFilter/Reduce. - Utiliser des Expressions Lambdas.
  • 24. - Utiliser les Interfaces du JDK8. - Pattern Iterator et Imperatif. - Pas de Lazy Operations. / allMatch - Réduction impérative. Lambdas, Streams et Collectors JDK 8 Pattern MapReFilter/Reduce.
  • 25. État : On a besoin d’un nouveau concept pour traiter les listes de grandes tailles en mode lazy et également pouvoir déléguer l’application des opérations sur les listes au JDK. Lambdas, Streams et Collectors
  • 26. Lambdas, Streams et Collectors int sum = liste.map(personne -> personne.getAge()) .filter(age -> age> 20) .reduce((age1, age2) -> age1 + age2); int sum = liste.stream.map( personne -> personne.getAge()) .filter(age -> age> 20) .reduce((age1, age2) -> age1 + age2); “Une nouvelle Interface sur l’API Collection Stream”
  • 27. Lambdas, Streams et Collectors Une Nouvelle Méthode sur l’API Collection hum…. - Problème l’ensemble des Collections “Custom” développés ne Compile plus ! - On a besoin d’une nouvelle notion !
  • 28. Interfaces par défaut Java 8 Lambdas, Streams et Collectors - Mot clé default. - Plus besoin d’implémenter. Questions : - classe Abstraite ? Non (Pas d’état, de variable) - Héritage Multiple ? Oui type et impl mais pas d’état. - Alors les conflits ? Oui mais Gérer avec des règles.
  • 29. Lambdas, Streams et Collectors Interfaces par défaut Java 8 - - Erreur de Compilation (dans l’IDE)
  • 30. Lambdas, Streams et Collectors Interfaces par défaut Java 8 - La Classe Gagne
  • 31. Lambdas, Streams et Collectors Interfaces par défaut Java 8 - Le plus spécifique gagne !
  • 32. Lambdas, Streams et Collectors Interfaces avec méthode “static” Java 8 Note : D'après Remi Forax cette possibilité existe depuis les débuts dans le JDK, elle était simplement bridée par le compilateur.
  • 33. État : On a besoin d’un nouveau concept pour traiter les listes de grandes tailles en mode lazy et également pouvoir déléguer l’application des opérations sur les listes au JDK. Lambdas, Streams et Collectors
  • 34. Lambdas, Streams et Collectors int sum = liste.stream.map( personne -> personne.getAge()) .filter(age -> age> 20) .reduce((age1, age2) -> age1 + age2); On a besoin d’un nouveau concept pour traiter les listes de grandes tailles en mode lazy et également pouvoir déléguer l’application des opérations sur les listes au JDK. API Stream
  • 35. Nouvelle Notion API Stream : - C’est une interface paramétrée. - Des interfaces pour les primitifs (IntStream..) - Ne porte pas de donnée mais elle est connectée à une source. - Ne peut pas modifier sa source (//) - Elle traite les opérations de façon lazy il va falloir donc distinguer les opérations. Lambdas, Streams et Collectors
  • 36. Lambdas, Streams et Collectors Création d’un Stream :
  • 37. API Stream applique les opérations en Lazy : ● Deux types d'opérations (JavaDoc) ○ Les Opérations Intermédiaires. ex. map, filter. ○ Les Opérations terminales : ex. reduce. (1X) Lambdas, Streams et Collectors
  • 38. Lambdas, Streams et Collectors API Stream applique les opérations en Lazy : Opérations Intermédiaires Opérations Terminales
  • 39. Lambdas, Streams et Collectors API Stream Parallèle : Les Streams rendent les opérations sur une collection déclaratives on peux donc facilement déléguer la // a la JVM.
  • 40. Lambdas, Streams et Collectors Pas si simple…... Le Temps n’est pas meilleur sur le traitement // la cause : la méthode limit est statefull.
  • 41. Retour sur mon projet exemple : Implémenter le Pattern Map/Filter/Reduce sur une collection pour calculer la sommes des âges des personnes qui ont plus de 20 ans. Lambdas, Streams et Collectors Lambda simplifie l’écriture. Stream permet de rendre déclaratif les opérations en mode Lazy sur les Collections int sum = liste.stream() .map(person -> person.getAge()) .filter(age -> age > 20) .reduce((age1,age2) -> age1 + age2); Réduction simple.
  • 42. La Réduction simple : Lambdas, Streams et Collectors Pas de méthode sum() sur un Stream paramétré. Par contre le IntStream possède cette méthode.
  • 43. La Réduction Élément neutre : Lambdas, Streams et Collectors Et si l’ensemble est vide ? Éléments neutre d’une Réduction est la valeur retourné si l’ensemble est vide Pour le sum c’est simple, une valeur neutre d’une somme d’un élément vide est 0. Pour le max ou le min alors ? ben il n’existe pas d'élément neutre satisfaisant.
  • 44. La Réduction Élément neutre le type Optional : Lambdas, Streams et Collectors C’est une manière de rendre la main au développeur sur un code déclaratif quand le programme ne peut pas déduire une valeur.
  • 45. La Réduction Élément neutre le type Optional : Lambdas, Streams et Collectors Pattern pour gérer les types : D’autre Types : List < Personne > liste = new ArrayList<Personne>(); Optional<Integer> sum = liste.stream() ….. .sum(); System.out.println(sum); => // Pas de NullPointerException Optional.empty
  • 46. Sur IntStream, LongStream….: ● average() ● sum(). ● summaryStatistics() La Réduction simple : Lambdas, Streams et Collectors Sur Stream < T > : ● reduce() ● anyMatch, allMatch, noneMatch. ● findFirst(), findAny()
  • 47. Retour sur mon projet exemple : Implémenter le Pattern Map/Filter/Reduce sur une collection pour calculer la sommes des âges des personnes qui ont plus de 20 ans. Lambdas, Streams et Collectors
  • 48. JDK 7 Pattern MapReFilter/Reduce. Lambdas, Streams et Collectors //Implémentassions d’une Liste Custom //Implémenter List Custom //Classe anonyme trés “verbeux” //Pattern Iterator Impératif
  • 49. Lambdas, Streams et Collectors int sum = liste.map(personne -> personne.getAge()) .filter(age -> age> 20) .reduce((age1, age2) -> age1 + age2); JDK 8 Pattern MapReFilter/Reduce. - Utiliser des Expressions Lambdas.
  • 50. - Utiliser les Interfaces du JDK8. - Pattern Iterator et Imperatif. - Pas de Lazy Operations. - Réduction impérative. Lambdas, Streams et Collectors JDK 8 Pattern MapReFilter/Reduce.
  • 51. Lambdas, Streams et Collectors int sum = liste.stream() .mapToInt(person -> person.getAge()) .filter(age -> age > 20) .sum(); JDK 8 Pattern MapReFilter/Reduce. - Utiliser des Expressions Lambdas. - Utiliser l’API Stream. - Utiliser la réduction Simple.
  • 52. ● Réduction Mutable et l’API Collectors. L’API Collectors est une boite à outils avec une liste de réduction sur étagères. 37 Méthodes. Les Réductions de l’API Collectors sont dit mutables, elles définissent trois choses : - Création du container. - Comment ajouter un élément au container. - Comment “merger” deux container en mode //. Lambdas, Streams et Collectors
  • 53. Lambdas, Streams et Collectors
  • 54. Lambdas, Streams et Collectors Réduction Mutable et l’API Collectors.
  • 55. Lambdas, Streams et Collectors La Méthode Mapping et l’introduction au downstream. Réduction Mutable et l’API Collectors. Une Fonction qui “map” les éléments du Stream. Downstream, un “Collector” à appliqué aux valeurs résultat du map… (Chaînage possible)
  • 56. Lambdas, Streams et Collectors La Méthode groupingBy construit des tables de Hashage. Réduction Mutable et l’API Collectors. Le Mapper pour faire la clé Downstream, l’opération à appliquer sur les valeurs.
  • 57. Lambdas, Streams et Collectors La Méthode groupingBy construit des tables de Hashage. Réduction Mutable et l’API Collectors.
  • 58. Les Nouveautés Java 8 API Date java.util.time (JSR 310) ● La Nouvelle API est inspiré de la librairie java Joda-Time. ● Le But est de pallier aux défauts de Date et Calendar. ○ Immutabilité et Thread Safe. ○ Chaînage. ○ le mois "0" n'existe plus et le mois "1" correspond au mois de janvier. ○ Deux nouvelles notions de temps : ■ .Temps machine (un entier qui augmente depuis le 01/01/1970) ■ Temps humain (succession de champs ayant une unités année, mois, jours, heures…) ○ Introduction de nouvelles notions Période, Instant, Durée. Instant Duration ZonedDateTime OffsetDateTime LocalDateTime Period Intéropérabilité TemporalAdjuter
  • 59. Les Nouveautés Java 8 String en bref….. String s = “bonjour” IntStream s = s.chars(). map(String::toUpperCase). forEach(System.out::print); StringJoiner sj = new StringJoiner(",", “{“,”}”); System.out.println(sj.add("one").add("two"). toString()); > {one,twho, three}
  • 60. Les Nouveautés Java 8 Nio en bref….. Stream < String > stream = Files.lines(path).filter(line - > line.contains(“ERROR”) .findFirst() .ifPresent(System.out::println); //AutoCloseable //retourne les fichiers du répertoire. Stream < Path > stream = Files.list(path); //retourne les fichiers du sous arbre, profondeur. Stream < Path > stream = Files.walk(path, 2);
  • 61. Les Nouveautés Java 8 Et Encore…. “Api Concurrentes” => Stamped Lock, Concurrent Adders (Atomics)…. “Array.sort, Array.paralleSort” => Tri paralléle. “Java Advanced Management Console” => Permettre de contrôler la version de Java installés sur un Parck Informatique (Administrateur) “MSI Enterprise JRE Installer” => Permettre l’installation et la maintenance des JRE sur un parc informatique. “Nashorm” => Nouveau moteur Javascript intégré dans le JDK (Quid du Javascript coté serveur…) “JVM” => Optimisation de la gestion de la mémoire supréssion du PermGen.
  • 62. Fin, Merci, des Questions ? L'horizon Java 8