Les nouveautés du JDK 1.8

Les nouveautés

Lambdas & collections

On a pu voir la puissance des lambdas, mais si elle ne peuvent être utilisés dans les collections, ça ne sert à rien.
Le problème: les collections utilisent des interfaces, et si l'on touche aux interfaces, tout le code qui utilisait celles-ci ne fonctionnerait plus.
La question qui se pose, c'est de comment changer les collections pour implanter les lambdas tout en gardant l'intéropérabilité de java et ses anciennes versions.
Plusieurs choix on été étudiés :

Solution retenue: Pour régler le problème, on va utiliser des traits, ce sont des méthodes par défaut ajoutées aux interfaces.

Les traits

Oui, vous ne rêvez pas, nous allons bien ajouter des méthodes dans les interfaces. Prennons pour exemple l'interface Iterable :
image 15
Dans la version 7 de java, L'interface Iterable avait qu'une seul méthode, iterator(), qui renvoyait un iterator. Dans la version 8, l'interface devient donc fonctionnelle (notez l'apparition de "@FunctionalInterface"). Cependant, on lui à ajouté d'autres méthodes par défaut comme la méthode forEach qui prend un Consumer.
On peut voir un exemple d'utilisation de cette méthode par défaut ci-dessous :
image 16b
A gauche la version 7 de java nous donnait la possibilité de faire une boucle foreach avec un for. Dans la partie de droite, on utilise le trait forEach de l'interface Iterable pour afficher tout les éléments de la liste.