Qu'est-ce qu'une interface fonctionnelle ?
Il est temps d’examiner en détail comment les lambdas sont créées en Java et quel est le lien avec les interfaces fonctionnelles.
Une interface fonctionnelle peut être utilisée pour représenter une action ou une opération exécutable. Plutôt que de créer une classe entière pour une tâche simple, il est possible de définir une interface avec une seule méthode qui décrit l’action.
Exemple d’interface fonctionnelle :
@FunctionalInterface
public interface MyFunctionalInterface {
void myMethod(); // The only abstract method
}
L’annotation @FunctionalInterface est optionnelle, mais elle aide le compilateur et les développeurs en garantissant que l’interface reste fonctionnelle et en empêchant l’ajout de plusieurs méthodes abstraites.
Pourquoi en avons-nous besoin ?
Dans l’API Stream, les interfaces fonctionnelles sont utilisées pour transmettre différents comportements aux méthodes qui traitent des collections de données.
Par exemple, il est possible de transmettre une condition de filtrage à une méthode qui sélectionne des éléments spécifiques d’une liste ou de fournir une opération pour transformer chaque élément, comme dans les méthodes filter() et map().
Main.java
1234567891011121314151617package com.example; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6); // Using `filter()` to extract even numbers List<Integer> evenNumbers = numbers.stream() .filter(n -> n % 2 == 0) // Predicate: keeps only even numbers .collect(Collectors.toList()); System.out.println(evenNumbers); } }
La méthode filter() prend une interface fonctionnelle spéciale appelée Predicate<T> (qui sera abordée plus tard), laquelle vérifie si un élément satisfait une certaine condition. Dans ce cas, l'expression lambda n -> n % 2 == 0 détermine si un nombre est pair. Si le nombre est divisible par 2 sans reste, il reste dans le flux.
Création d'une interface fonctionnelle personnalisée
Supposons qu'une interface soit nécessaire pour effectuer des opérations arithmétiques telles que l'addition ou la soustraction.
Il est possible de créer une interface fonctionnelle nommée ArithmeticOperation avec une méthode apply qui réalise une opération sur deux nombres, a et b.
@FunctionalInterface
public interface ArithmeticOperation {
int apply(int a, int b); // Method to perform an operation on two numbers
}
Maintenant que vous disposez de l’interface, il est possible d’utiliser des expressions lambda pour définir différentes opérations telles que l’addition et la soustraction :
Main.java
1234567891011public class Main { public static void main(String[] args) { // Addition ArithmeticOperation add = (a, b) -> a + b; System.out.println("Sum: " + add.apply(5, 3)); // 8 // Subtraction ArithmeticOperation subtract = (a, b) -> a - b; System.out.println("Difference: " + subtract.apply(5, 3)); // 2 } }
Les expressions lambda (a, b) -> a + b et (a, b) -> a - b implémentent la méthode apply de l'interface, réalisant respectivement l'addition et la soustraction. La première expression lambda retourne la somme de deux nombres, tandis que la seconde retourne leur différence.
Cette approche offre une méthode flexible pour utiliser différentes opérations arithmétiques sans avoir à créer des classes distinctes pour chacune d'elles.
1. Qu'est-ce qu'une interface fonctionnelle en Java ?
2. Quelle expression lambda implémente correctement l'interface fonctionnelle suivante ?
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion
Awesome!
Completion rate improved to 2.33
Qu'est-ce qu'une interface fonctionnelle ?
Glissez pour afficher le menu
Il est temps d’examiner en détail comment les lambdas sont créées en Java et quel est le lien avec les interfaces fonctionnelles.
Une interface fonctionnelle peut être utilisée pour représenter une action ou une opération exécutable. Plutôt que de créer une classe entière pour une tâche simple, il est possible de définir une interface avec une seule méthode qui décrit l’action.
Exemple d’interface fonctionnelle :
@FunctionalInterface
public interface MyFunctionalInterface {
void myMethod(); // The only abstract method
}
L’annotation @FunctionalInterface est optionnelle, mais elle aide le compilateur et les développeurs en garantissant que l’interface reste fonctionnelle et en empêchant l’ajout de plusieurs méthodes abstraites.
Pourquoi en avons-nous besoin ?
Dans l’API Stream, les interfaces fonctionnelles sont utilisées pour transmettre différents comportements aux méthodes qui traitent des collections de données.
Par exemple, il est possible de transmettre une condition de filtrage à une méthode qui sélectionne des éléments spécifiques d’une liste ou de fournir une opération pour transformer chaque élément, comme dans les méthodes filter() et map().
Main.java
1234567891011121314151617package com.example; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6); // Using `filter()` to extract even numbers List<Integer> evenNumbers = numbers.stream() .filter(n -> n % 2 == 0) // Predicate: keeps only even numbers .collect(Collectors.toList()); System.out.println(evenNumbers); } }
La méthode filter() prend une interface fonctionnelle spéciale appelée Predicate<T> (qui sera abordée plus tard), laquelle vérifie si un élément satisfait une certaine condition. Dans ce cas, l'expression lambda n -> n % 2 == 0 détermine si un nombre est pair. Si le nombre est divisible par 2 sans reste, il reste dans le flux.
Création d'une interface fonctionnelle personnalisée
Supposons qu'une interface soit nécessaire pour effectuer des opérations arithmétiques telles que l'addition ou la soustraction.
Il est possible de créer une interface fonctionnelle nommée ArithmeticOperation avec une méthode apply qui réalise une opération sur deux nombres, a et b.
@FunctionalInterface
public interface ArithmeticOperation {
int apply(int a, int b); // Method to perform an operation on two numbers
}
Maintenant que vous disposez de l’interface, il est possible d’utiliser des expressions lambda pour définir différentes opérations telles que l’addition et la soustraction :
Main.java
1234567891011public class Main { public static void main(String[] args) { // Addition ArithmeticOperation add = (a, b) -> a + b; System.out.println("Sum: " + add.apply(5, 3)); // 8 // Subtraction ArithmeticOperation subtract = (a, b) -> a - b; System.out.println("Difference: " + subtract.apply(5, 3)); // 2 } }
Les expressions lambda (a, b) -> a + b et (a, b) -> a - b implémentent la méthode apply de l'interface, réalisant respectivement l'addition et la soustraction. La première expression lambda retourne la somme de deux nombres, tandis que la seconde retourne leur différence.
Cette approche offre une méthode flexible pour utiliser différentes opérations arithmétiques sans avoir à créer des classes distinctes pour chacune d'elles.
1. Qu'est-ce qu'une interface fonctionnelle en Java ?
2. Quelle expression lambda implémente correctement l'interface fonctionnelle suivante ?
Merci pour vos commentaires !