Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Qu'est-ce qu'une interface fonctionnelle ? | Fondamentaux et Capacités Fonctionnelles de l'API Stream
API Stream

bookQu'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

Main.java

copy
1234567891011121314151617
package 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

Main.java

copy
1234567891011
public 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 ?

question mark

Qu'est-ce qu'une interface fonctionnelle en Java ?

Select the correct answer

question mark

Quelle expression lambda implémente correctement l'interface fonctionnelle suivante ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 1. Chapitre 3

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

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

bookQu'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

Main.java

copy
1234567891011121314151617
package 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

Main.java

copy
1234567891011
public 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 ?

question mark

Qu'est-ce qu'une interface fonctionnelle en Java ?

Select the correct answer

question mark

Quelle expression lambda implémente correctement l'interface fonctionnelle suivante ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 1. Chapitre 3
some-alt