English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriel de base Java

Contrôle de flux Java

Java Tableau

Java Programmation Orientée Objet (I)

Java Programmation Orientée Objet (II)

Java Programmation Orientée Objet (III)

Gestion des exceptions Java

Java Liste (List)

Java Queue (file d'attente)

Java Map Collection

Java Set Collection

Java Entrée Sortie (I/)

Java Reader/Writer

Autres sujets Java

Java 8 Interface fonctionnelle

Java 8 New features

Une interface fonctionnelle (Functional Interface) est une interface qui possède une et une seule méthode abstraite, mais peut en avoir plusieurs non abstraites.

Les interfaces fonctionnelles peuvent être implicitement converties en expressions Lambda.

Les expressions Lambda et les appels de méthode (qui peuvent également être considérés comme des expressions Lambda) .

Par exemple, une interface fonctionnelle pourrait être définie comme suit :

@FunctionalInterface
interface GreetingService 
{
    void sayMessage(String message);
}

Alors, vous pouvez utiliser l'expression Lambda pour représenter une implémentation de cette interface (note : JAVA 8 Auparavant, cela était généralement réalisé à l'aide d'une classe anonyme) :

GreetingService greetService1 message -> System.out.println("Hello ") + message);

les interfaces fonctionnelles peuvent offrir un soutien amical aux fonctions existantes.

JDK 1.8 interfaces fonctionnelles existantes avant :

  • java.lang.Runnable

  • java.util.concurrent.Callable

  • java.security.PrivilegedAction

  • java.util.Comparator

  • java.io.FileFilter

  • java.nio.file.PathMatcher

  • java.lang.reflect.InvocationHandler

  • java.beans.PropertyChangeListener

  • java.awt.event.ActionListener

  • javax.swing.event.ChangeListener

JDK 1.8 nouvelles interfaces de fonction ajoutées :

  • java.util.function

java.util.function contient de nombreux classes, pour soutenir le programmation fonctionnelle Java, les interfaces fonctionnelles dans ce paquet incluent :

numérointerface & description
1BiConsumer<T,U>

représente une opération qui accepte deux paramètres d'entrée et ne renvoie rien

2BiFunction<T,U,R>

représente une méthode qui accepte deux paramètres d'entrée et renvoie un résultat

3BinaryOperator<T>

représente une opération sur deux opérateurs de même type et renvoie un résultat du même type que les opérateurs

4BiPredicate<T,U>

représente une méthode booleane avec deux paramètres

5BooleanSupplier

représente le fournisseur d'un résultat boolean

6Consumer<T>

représente une opération qui accepte un paramètre d'entrée et ne renvoie rien.

7DoubleBinaryOperator

représente une opération sur deux opérateurs de valeur double et renvoie un résultat de valeur double.

8DoubleConsumer

représente une opération qui accepte une valeur double en paramètre et ne renvoie pas de résultat.

9DoubleFunction<R>

représente une méthode qui accepte une valeur double en paramètre et renvoie un résultat

10DoublePredicate

représente une méthode booleane avec un paramètre de valeur double

11DoubleSupplier

représente le fournisseur d'une structure de valeur double

12DoubleToIntFunction

Accepte une entrée de type double et retourne un résultat de type int.

13DoubleToLongFunction

Accepte une entrée de type double et retourne un résultat de type long

14DoubleUnaryOperator

Accepte un paramètre de type double et le type de retour est également de type double.

15Function<T,R>

Accepte un paramètre d'entrée et retourne un résultat.

16IntBinaryOperator

Accepte deux paramètres de type int, et le type de retour est également de type int.

17IntConsumer

Accepte un paramètre d'entrée de type int, sans valeur de retour.

18IntFunction<R>

Accepte un paramètre d'entrée de type int et retourne un résultat.

19IntPredicate

Accepte un paramètre d'entrée de type int et retourne un résultat de type booléen.

20IntSupplier

Sans paramètres, retourne un résultat de type int.

21IntToDoubleFunction

Accepte une entrée de type int et retourne un résultat de type double.

22IntToLongFunction

Accepte une entrée de type int et retourne un résultat de type long.

23IntUnaryOperator

Accepte un paramètre de type int et le type de retour est également de type int.

24LongBinaryOperator

Accepte deux paramètres de type long, et le type de retour est également de type long.

25LongConsumer

Accepte un paramètre d'entrée de type long, sans valeur de retour.

26LongFunction<R>

Accepte un paramètre d'entrée de type long et retourne un résultat.

27LongPredicate

R accepte un paramètre d'entrée de type long et retourne un résultat de type booléen.

28LongSupplier

Sans paramètres, retourne une valeur de type long.

29LongToDoubleFunction

Accepte une entrée de type long et retourne un résultat de type double.

30LongToIntFunction

Accepte une entrée de type long et retourne un résultat de type int.

31LongUnaryOperator

Accepte un paramètre de type long et retourne une valeur de type long.

32ObjDoubleConsumer<T>

Accepte une entrée de type object et un paramètre de type double, sans valeur de retour.

33ObjIntConsumer<T>

Accepte une entrée de type object et un paramètre de type int, sans valeur de retour.

34ObjLongConsumer<T>

Accepte un paramètre d'entrée de type object et un paramètre de type long, sans retourner de valeur.

35Predicate<T>

Accepte un paramètre d'entrée, retourne un résultat de type boolean.

36Supplier<T>

Sans paramètres, retourne un résultat.

37ToDoubleBiFunction<T,U>

Accepte deux paramètres d'entrée, retourne un résultat de type double.

38ToDoubleFunction<T>

Accepte un paramètre d'entrée, retourne un résultat de type double.

39ToIntBiFunction<T,U>

Accepte deux paramètres d'entrée, retourne un résultat de type int.

40ToIntFunction<T>

Accepte un paramètre d'entrée, retourne un résultat de type int.

41ToLongBiFunction<T,U>

Accepte deux paramètres d'entrée, retourne un résultat de type long.

42ToLongFunction<T>

Accepte un paramètre d'entrée, retourne un résultat de type long.

43UnaryOperator<T>

Accepte un paramètre de type T, le type de retour est également T.

Exemple d'interface fonctionnelle

L'interface Predicate <T> est une interface fonctionnelle qui accepte un paramètre d'entrée T et retourne un résultat de type boolean.

Cette interface contient plusieurs méthodes par défaut pour combiner Predicate en d'autres logiques complexes (par exemple : ET, OU, NON).

Cette interface est utilisée pour tester si un objet est true ou false.

Nous pouvons le voir à travers les exemples suivants (Java8Pour comprendre l'utilisation de l'interface fonctionnelle Predicate <T> dans Tester.java):

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);
        
      // Predicate<Integer> predicate = n ->true
      // n is a parameter passed to the test method of the Predicate interface
      // Si n existe, le méthode test retourne true
        
      System.out.println("Afficher toutes les données:");
        
      // Passer le paramètre n
      eval(list, n->true);
        
      // Predicate<Integer> predicate1 = n -> n%2 == 0
      // n is a parameter passed to the test method of the Predicate interface
      // Si n%2 Pour 0, le méthode test retourne true
        
      System.out.println("Afficher tous les nombres pairs:");
      eval(list, n-> n%2 == 0 );
        
      // Predicate<Integer> predicate2 = n -> n > 3
      // n is a parameter passed to the test method of the Predicate interface
      // If n is greater than 3 test method returns true
        
      System.out.println("Output greater than 3 All numbers:");
      eval(list, n-> n > 3 );
   }
    
   public static void eval(List<Integer> list, Predicate<Integer> predicate) {
      for(Integer n: list) {
        
         if(predicate.test(n)) {
            System.out.println(n + " ");
         }
      }
   }
}

Execute the above script, the output result is:

$ javac Java8Tester.java 
$ java Java8Tester
Output all data:
1 
2 
3 
4 
5 
6 
7 
8 
9 
Output all even numbers:
2 
4 
6 
8 
Output greater than 3 All numbers of:
4 
5 
6 
7 
8 
9

Java 8 New features