Maîtriser les interfaces fonctionnelles Java 8 : Guide complet
Une interface fonctionnelle a une seule méthode abstraite. Java 8 en définit beaucoup dans java.util.function pour usage intensif avec les lambdas.
Principales interfaces (extrait)
| Interface | Description |
|---|---|
Predicate<T> | Prédicat booléen sur un argument : test(T) |
Consumer<T> | Opération sur un argument, sans retour : accept(T) |
Function<T,R> | Fonction un argument → résultat : apply(T) |
Supplier<T> | Fournisseur de résultat : get() |
UnaryOperator<T> | Opération un opérande → même type : apply(T) |
BinaryOperator<T> | Opération deux opérandes même type → même type |
BiPredicate<T,U> | Prédicat deux arguments |
BiFunction<T,U,R> | Fonction deux arguments → résultat |
BiConsumer<T,U> | Opération deux arguments, sans retour |
... et variantes primitives (IntPredicate, LongConsumer, DoubleFunction, etc.) pour éviter l'autoboxing.
Exemple : Predicate<T> pour filtrer une liste
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
public class Java8Tester {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9);
System.out.println("Tous les nombres:");
eval(list, n -> true);
System.out.println("Nombres pairs:");
eval(list, n -> n % 2 == 0);
System.out.println("Nombres > 3:");
eval(list, n -> n > 3);
}
static void eval(List<Integer> list, Predicate<Integer> predicate) {
for (Integer n : list) {
if (predicate.test(n)) System.out.println(n + " ");
}
}
}
Sortie
Tous les nombres: 1 2 3 4 5 6 7 8 9
Nombres pairs: 2 4 6 8
Nombres > 3: 4 5 6 7 8 9
L'annotation @FunctionalInterface (optionnelle) garantit qu'une interface reste fonctionnelle (erreur de compilation si >1 méthode abstraite).
Java
- Maîtriser les opérateurs Java : Types, syntaxe et exemples pratiques
- Commentaires Java : Types, utilisation et bonnes pratiques
- Maîtriser la boucle for améliorée en Java : Syntaxe, exemples et bonnes pratiques
- Maîtriser les chaînes de caractères en Java : Création, méthodes et bonnes pratiques
- Maîtriser les interfaces Java : concepts, implémentation et bonnes pratiques
- Maîtriser les classes internes anonymes en Java : définition, syntaxe et exemples pratiques
- Maîtriser le try-with-resources Java : gestion automatique des ressources expliquée
- Annotations Java expliquées : types, placement et exemples pratiques
- Assertions Java : guide pratique pour détecter les bugs et assurer la fiabilité du code