English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Funktionale Schnittstelle (Functional Interface) ist eine Schnittstelle, die genau eine abstrakte Methode hat, aber auch mehrere nicht-abstrakte Methoden haben kann.
Funktionale Schnittstellen können in Lambda-Ausdrucksformen implizit umgewandelt werden.
Lambda-Ausdrucksformen und Methodenbezug (es kann auch als Lambda-Ausdrucksformel betrachtet werden).
Wie eine funktionale Schnittstelle definiert, siehe unten:
@FunctionalInterface interface GreetingService { void sayMessage(String Nachricht); }
Dann kann eine Lambda-Ausdrucksformel verwendet werden, um eine Implementierung dieser Schnittstelle darzustellen (Anmerkung: JAVA 8 Bisher wurde dies in der Regel durch eine anonyme Klasse implementiert):
GreetingService greetService1 = Nachricht -> System.out.println("Hello ")} + message);
funktionale Schnittstellen unterstützen die Lambda-Funktionen der bestehenden Funktionen freundlich.
JDK 1.8 früher vorhandene funktionalen Schnittstellen:
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 neu hinzugefügte funktionalen Schnittstellen:
java.util.function
java.util.function Es enthält viele Klassen, um die funktionalen Programmierstile in Java zu unterstützen, die funktionalen Schnittstellen in diesem Paket sind:
Nummer | Interface & Beschreibung |
---|---|
1 | BiConsumer<T,U> stellt eine Operation dar, die zwei Eingangsparameter akzeptiert und kein Ergebnis zurückgibt |
2 | BiFunction<T,U,R> stellt eine Methode dar, die zwei Eingangsparameter akzeptiert und ein Ergebnis zurückgibt |
3 | BinaryOperator<T> stellt eine Operation dar, die auf zwei gleichartige Operatoren wirkt und ein gleichartiges Ergebniss zurückgibt |
4 | BiPredicate<T,U> stellt eine boolean-Wertmethoden mit zwei Parametern dar |
5 | BooleanSupplier stellt den Anbieter eines boolean-Wertergebnisses dar |
6 | Consumer<T> stellt eine Operation dar, die einen Eingangsparameter akzeptiert und kein Ergebnis zurückgibt |
7 | DoubleBinaryOperator stellt eine Operation dar, die auf zwei double-Wertoperatoren wirkt und ein double-Wertergebnis zurückgibt. |
8 | DoubleConsumer stellt eine Operation dar, die einen double-Parameter akzeptiert und kein Ergebnis zurückgibt. |
9 | DoubleFunction<R> stellt eine Methode dar, die einen double-Parameter akzeptiert und ein Ergebnis zurückgibt |
10 | DoublePredicate stellt einen boolean-Wertmethoden mit double-Parameter dar |
11 | DoubleSupplier stellt den Anbieter einer double-Wertstruktur dar |
12 | DoubleToIntFunction Erfolgt die Übernahme eines Parameters vom Typ double und liefert ein Ergebnis vom Typ int zurück. |
13 | DoubleToLongFunction Erfolgt die Übernahme eines Parameters vom Typ double und liefert ein Ergebnis vom Typ long zurück. |
14 | DoubleUnaryOperator Nimmt einen Parameter vom Typ double an und liefert ein Ergebnis vom Typ double zurück. |
15 | Function<T,R> Erfolgt die Übernahme eines Inputparameters und liefert ein Ergebnis zurück. |
16 | IntBinaryOperator Erfolgt die Übernahme beider Parameter vom Typ int und liefert ein Ergebnis vom Typ int zurück. |
17 | IntConsumer Nimmt einen int-Typ-Inputparameter an, ohne Rückgabewert. |
18 | IntFunction<R> Erfolgt die Übernahme eines Parameters vom Typ int und liefert ein Ergebnis zurück. |
19 | IntPredicate Nimmt einen int-Inputparameter an und liefert ein Ergebnis vom Typ boolean zurück. |
20 | IntSupplier Ohne Parameter, liefert ein Ergebnis vom Typ int zurück. |
21 | IntToDoubleFunction Erfolgt die Übernahme eines Parameters vom Typ int und liefert ein Ergebnis vom Typ double zurück. |
22 | IntToLongFunction Erfolgt die Übernahme eines Parameters vom Typ int und liefert ein Ergebnis vom Typ long zurück. |
23 | IntUnaryOperator Erfolgt die Übernahme eines Parameters vom Typ int und liefert ein Ergebnis vom Typ int zurück. |
24 | LongBinaryOperator Erfolgt die Übernahme beider Parameter vom Typ long und liefert ein Ergebnis vom Typ long zurück. |
25 | LongConsumer Erfolgt die Übernahme eines Parameters vom Typ long, ohne Rückgabewert. |
26 | LongFunction<R> Erfolgt die Übernahme eines Parameters vom Typ long und liefert ein Ergebnis zurück. |
27 | LongPredicate R nimmt einen long-Inputparameter an und liefert ein Ergebnis vom Typ boolean zurück. |
28 | LongSupplier Ohne Parameter, liefert einen Wert vom Typ long zurück. |
29 | LongToDoubleFunction Erfolgt die Übernahme eines Parameters vom Typ long und liefert ein double-Typ-Ergebnis zurück. |
30 | LongToIntFunction Erfolgt die Übernahme eines Parameters vom Typ long und liefert ein int-Typ-Ergebnis zurück. |
31 | LongUnaryOperator Erfolgt die Übernahme eines Parameters vom Typ long und liefert einen Wert vom Typ long zurück. |
32 | ObjDoubleConsumer<T> Erfolgt die Übernahme eines Objekts und eines double-Typ-Parameters, ohne Rückgabewert. |
33 | ObjIntConsumer<T> Erfolgt die Übernahme eines Objekts und eines int-Typ-Parameters, ohne Rückgabewert. |
34 | ObjLongConsumer<T> Akzeptiert ein object-Typ- und ein long-Typ-Eingangsparameter und gibt kein Ergebnis zurück. |
35 | Predicate<T> Akzeptiert einen Eingangsparameter und gibt ein boolesches Ergebnis zurück. |
36 | Supplier<T> Keine Parameter, gibt ein Ergebnis zurück. |
37 | ToDoubleBiFunction<T,U> Akzeptiert zwei Eingangsparameter und gibt ein double-Typ-Ergebnis zurück |
38 | ToDoubleFunction<T> Akzeptiert einen Eingangsparameter und gibt ein double-Typ-Ergebnis zurück |
39 | ToIntBiFunction<T,U> Akzeptiert zwei Eingangsparameter und gibt ein int-Typ-Ergebnis zurück. |
40 | ToIntFunction<T> Akzeptiert einen Eingangsparameter und gibt ein int-Typ-Ergebnis zurück. |
41 | ToLongBiFunction<T,U> Akzeptiert zwei Eingangsparameter und gibt ein long-Typ-Ergebnis zurück. |
42 | ToLongFunction<T> Akzeptiert einen Eingangsparameter und gibt ein long-Typ-Ergebnis zurück. |
43 | UnaryOperator<T> Akzeptiert einen Parameter vom Typ T, gibt auch einen Wert vom Typ T zurück. |
Das Predicate <T> Interface ist ein funktionaler Interface, das einen Eingangsparameter T annimmt und ein boolesches Ergebnis zurückgibt.
Dieses Interface enthält verschiedene Standardmethoden, um Predicate zu kombinieren und komplexe Logiken zu erzeugen (z.B.: und, oder, nicht).
Dieses Interface wird verwendet, um zu testen, ob ein Objekt true oder false ist.
Wir können die folgenden Beispiele (Java8um die Verwendung des funktionalen Interfaces Predicate <T> zu verstehen:
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 ist ein Parameter, der an die test Methode des Predicate Interfaces übergeben wird // wenn n existiert, gibt die Methode test true zurück System.out.println("Ausgabe aller Daten:"); // Übergabe des Parameters n eval(list, n->true); // Predicate<Integer> predicate1 = n -> n%2 == 0 // n ist ein Parameter, der an die test Methode des Predicate Interfaces übergeben wird // wenn n%2 Für 0 gibt die Methode test true zurück System.out.println("Ausgabe aller geraden Zahlen:"); eval(list, n-> n%2 == 0 ); // Predicate<Integer> predicate2 = n -> n > 3 // n ist ein Parameter, der an die test Methode des Predicate Interfaces übergeben wird // wenn n größer als 3 test Methode gibt true zurück System.out.println("Alle Zahlen größer als 3 alle Zahlen:"); 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 + " "); } } } }
Führen Sie das Skript aus, um die folgenden Ergebnisse zu erhalten:
$ javac Java8Tester.java $ java Java8Tester Alle Daten: 1 2 3 4 5 6 7 8 9 Alle geraden Zahlen: 2 4 6 8 Alle Zahlen größer als 3 alle Zahlen: 4 5 6 7 8 9