programmation Java (école d'ingénieur) · Chapitre 13 · Exercice de TD
Fonctions d'ordre supérieur
Lambdas et streams · niveau 2
Énoncé
Sans utiliser de stream, écrire deux méthodes génériques qui prennent une fonction en paramètre :
static <T> List<T> filtrer(List<T> l, Predicate<T> garder)
static <T, R> List<R> appliquer(List<T> l, Function<T, R> f)
Les utiliser pour obtenir les mots d'au moins cinq lettres d'une liste, leurs longueurs, et les carrés des nombres impairs de à .
Corrigé
import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
import java.util.function.Predicate;
public class Exo10OrdreSuperieur {
static <T> List<T> filtrer(List<T> l, Predicate<T> garder) {
List<T> r = new ArrayList<>();
for (T x : l) if (garder.test(x)) r.add(x);
return r;
}
static <T, R> List<R> appliquer(List<T> l, Function<T, R> f) {
List<R> r = new ArrayList<>();
for (T x : l) r.add(f.apply(x));
return r;
}
public static void main(String[] args) {
List<String> mots = List.of("arbre", "il", "maison", "eau", "ordinateur");
System.out.println(filtrer(mots, m -> m.length() >= 5));
System.out.println(appliquer(mots, String::length));
System.out.println(appliquer(filtrer(List.of(1, 2, 3, 4, 5, 6), n -> n % 2 == 1), n -> n * n));
}
}
[arbre, maison, ordinateur]
[5, 2, 6, 3, 10]
[1, 9, 25]
Une méthode qui prend une fonction en paramètre est dite d'ordre supérieur. Ces deux méthodes sont, en miniature, ce que font filter et map sur un stream : la boucle est écrite une fois pour toutes, et le traitement propre à chaque usage est passé sous forme de lambda.
100 % gratuit
La suite du chapitre est sur Adloun
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.