Les nouveautés du JDK 1.8
Les nouveautés
Stream
Le nouveau package java.util.stream permet le support d'opération fonctionnelle sur des flux de valeurs tel que les opérations filter / map / reduce.
Les streams peuvent être parallèle ou séquentiel. Les streams Séquentiels sont éxecuté dans une seule thread, alors que les streams parallèles peuvents s'executer de manière concurrente, dans plusieurs thread selon l'implémentation.
Les opérations sur les streams peuvent être intermédiaire ou terminal. Une opération intermédiaire renvoie le stream courant (exemple filter / map). Les opération terminal consomme le stream qui ne peut être réutilisé (exemple reduce).
L'avantage des streams, c'est que l'on va pouvoir faire des opérations utiles sur des collections, et l'optimisation des opérations est gérée par l'API.
Notez que les opérations de type filter / map / reduce sont dites paresseuses, c'est à dire que les opérations s'effecturont au moment où nous aurons besoin de la donnée.
Attention à ne pas paralléliser tout le temps, si par exemple l'ordre des éléments sont important ou si les opérations sur le stream ne sont pas assez complexes.
Nous allons voir ci-dessous un exemple d'utilisation des streams sur des collections. Pour cela, nous utiliseront la classe Article :

Elle contient 3 champs. Un double "prix", un String "name", et un object Double "promo".
Nous aurons donc une list qui contiendra divers article, dont certains seront en promotion, et d'autres non. Que se passe t-ils lorsque nous voulons la somme de tout les articles dans notre liste qui sont en promotion?
Pour java 7, le code ressemble à ça :

On a une boucle for qui pour chaque article de la liste additionne son prix avec les autres articles qui sont en promotion.
Et voilà maintenant comment on écrit la même fonction en utilisant les streams :

la méthode stream() renvoie le stream associé à la liste. Filter renvoie un stream qui correspond aux articles en promotion, mapToDouble renvoie un stream qui correspond au prix promo. Puis la fonction sum() renvoie la somme des promotions.