Adloun

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

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →