Programmation fonctionnelle : lambdas et streams en Java
Map, filter, reduce : le style fonctionnel rend le code plus clair. Concepts et exemples Java.
Depuis Java 8, le style fonctionnel coexiste avec l’objet. Les certifications l’évaluent largement — et il rend beaucoup de code plus lisible.
Les lambdas et les interfaces fonctionnelles
Une lambda est une fonction anonyme qui implémente une interface à une seule méthode (Function, Predicate, Consumer…) :
Predicate<Integer> estPair = n -> n % 2 == 0;
Function<String, Integer> longueur = String::length; // référence de méthode
Les streams : map / filter / reduce
Un stream enchaîne des opérations sur une séquence, de façon déclarative :
List<String> noms = List.of("Ana", "Bob", "Cléa", "Dan");
List<String> result = noms.stream()
.filter(n -> n.length() > 3) // garde "Cléa"
.map(String::toUpperCase) // -> "CLÉA"
.sorted()
.toList();
La réduction agrège vers une seule valeur :
int total = List.of(1, 2, 3, 4).stream()
.reduce(0, Integer::sum); // 10
Paresse et court-circuit
Les opérations intermédiaires (map, filter) sont paresseuses : rien ne s’exécute tant qu’il n’y a pas d’opération terminale (toList, count, reduce). C’est ce qui permet l’optimisation et le court-circuit (findFirst).
Le piège classique
Un stream ne se réutilise pas : une fois consommé, il est clos. Et évite les effets de bord dans une lambda (modifier une variable externe) — c’est contraire à l’esprit fonctionnel, et souvent un piège d’examen.
Envie d’aller plus loin avec CertifApp ?
Découvrir CertifApp