mercredi 26 juillet 2017

Un aperçu sur Stream API dans Java 8

L'API Stream dans Java 8 est utilisé pour travailler avec les collections, pour pouvoir écrire le code dans le style fonctionnel. Grâce à sa simplicité Stream est devenu très populaire entre les programmeurs. Selon la description officielle, la bibliothèque « Java.util.stream » -  nous permet de faire plusieurs opérations dans le style fonctionnel avec des collections d'éléments, tels comme les transformations de MapReduce, etc. L'API contient les opérations « intermédiaires », comme Stream.map ou Stream.filter, mais aussi les opérations « finales » comme Stream.forEach ou Stream.reduce. L'opération « intermédiaire » ne serait jamais exécutées avant l'opération « finale » (p.e. Stream.map  ne serait pas exécutée avant Stream.reduce, mémé si vous le mettez avant dans le code). Un tel comportement s'appelle LAZY.

Une autre grande caractéristique de l'API Stream c'est la parallélisation des sources - parallelStream () qui vient utilisée pour améliorer les performances pour traiter des grandes quantités de données. Les flux parallèles peuvent accélérer l'exécution pour certains types de transactions. Je les utilise quand je sais que la collection est trop grande pour être gérée avec « ForkJoin. » Plus d'informations sur la bibliothèque ForkJoin peut lire ici: http://www.baeldung.com/java-fork-join.

Retournons à nos moutons et nous considérerons un exemple pratique. Un exemple simple de recherche d'un valeur min et d'un valeur max dans une collection.

ArrayList testValues = new ArrayList();
testValues.add(0,15);
testValues.add(1,1);
testValues.add(2,2);
testValues.add(3,100);
testValues.add(4,50);
Optional
maxValue = testValues.stream().max(Integer::compareTo);
System.out.println("MaxValue="+maxValue);
Optional
minValue = testValues.stream().min(Integer::compareTo);
System.out.println("MinValue="+minValue);