Java 8 - Funktionsschnittstellen
Funktionale Schnittstellen weisen eine einzige Funktionalität auf. Beispielsweise wird zu Vergleichszwecken eine vergleichbare Schnittstelle mit einer einzelnen Methode 'compareTo' verwendet. Java 8 hat viele funktionale Schnittstellen definiert, die häufig in Lambda-Ausdrücken verwendet werden. Im Folgenden finden Sie eine Liste der im Paket java.util.Function definierten Funktionsschnittstellen.
Sr.Nr. | Schnittstelle & Beschreibung |
---|---|
1 | BiConsumer<T,U> Stellt eine Operation dar, die zwei Eingabeargumente akzeptiert und kein Ergebnis zurückgibt. |
2 | BiFunction<T,U,R> Stellt eine Funktion dar, die zwei Argumente akzeptiert und ein Ergebnis erzeugt. |
3 | BinaryOperator<T> Stellt eine Operation für zwei Operanden desselben Typs dar und erzeugt ein Ergebnis desselben Typs wie die Operanden. |
4 | BiPredicate<T,U> Stellt ein Prädikat (Boolesche Funktion) von zwei Argumenten dar. |
5 | BooleanSupplier Repräsentiert einen Lieferanten von Booleschen Ergebnissen. |
6 | Consumer<T> Stellt eine Operation dar, die ein einzelnes Eingabeargument akzeptiert und kein Ergebnis zurückgibt. |
7 | DoubleBinaryOperator Stellt eine Operation für zwei doppelwertige Operanden dar und erzeugt ein doppeltwertiges Ergebnis. |
8 | DoubleConsumer Stellt eine Operation dar, die ein einzelnes doppelwertiges Argument akzeptiert und kein Ergebnis zurückgibt. |
9 | DoubleFunction<R> Stellt eine Funktion dar, die ein doppeltwertiges Argument akzeptiert und ein Ergebnis erzeugt. |
10 | DoublePredicate Stellt ein Prädikat (Boolesche Funktion) eines doppeltwertigen Arguments dar. |
11 | DoubleSupplier Repräsentiert einen Lieferanten mit doppelt bewerteten Ergebnissen. |
12 | DoubleToIntFunction Stellt eine Funktion dar, die ein doppeltwertiges Argument akzeptiert und ein intwertiges Ergebnis erzeugt. |
13 | DoubleToLongFunction Stellt eine Funktion dar, die ein doppeltwertiges Argument akzeptiert und ein langwertiges Ergebnis erzeugt. |
14 | DoubleUnaryOperator Stellt eine Operation für einen einzelnen doppelwertigen Operanden dar, der ein doppeltwertiges Ergebnis erzeugt. |
15 | Function<T,R> Stellt eine Funktion dar, die ein Argument akzeptiert und ein Ergebnis erzeugt. |
16 | IntBinaryOperator Stellt eine Operation für zwei Operanden mit int-Werten dar und erzeugt ein Ergebnis mit int-Werten. |
17 | IntConsumer Stellt eine Operation dar, die ein einzelnes Argument mit int-Wert akzeptiert und kein Ergebnis zurückgibt. |
18 | IntFunction<R> Stellt eine Funktion dar, die ein int-Wert-Argument akzeptiert und ein Ergebnis erzeugt. |
19 | IntPredicate Repräsentiert ein Prädikat (Boolesche Funktion) eines int-wertigen Arguments. |
20 | IntSupplier Repräsentiert einen Lieferanten von int-bewerteten Ergebnissen. |
21 | IntToDoubleFunction Stellt eine Funktion dar, die ein Argument mit int-Wert akzeptiert und ein Ergebnis mit zwei Werten erzeugt. |
22 | IntToLongFunction Stellt eine Funktion dar, die ein int-Wert-Argument akzeptiert und ein langwertiges Ergebnis erzeugt. |
23 | IntUnaryOperator Stellt eine Operation für einen einzelnen Operanden mit int-Wert dar, die ein Ergebnis mit int-Wert erzeugt. |
24 | LongBinaryOperator Stellt eine Operation für zwei langwertige Operanden dar und erzeugt ein langwertiges Ergebnis. |
25 | LongConsumer Stellt eine Operation dar, die ein einzelnes langwertiges Argument akzeptiert und kein Ergebnis zurückgibt. |
26 | LongFunction<R> Stellt eine Funktion dar, die ein langwertiges Argument akzeptiert und ein Ergebnis erzeugt. |
27 | LongPredicate Stellt ein Prädikat (Boolesche Funktion) eines langwertigen Arguments dar. |
28 | LongSupplier Repräsentiert einen Lieferanten von langjährigen Ergebnissen. |
29 | LongToDoubleFunction Stellt eine Funktion dar, die ein langwertiges Argument akzeptiert und ein doppeltwertiges Ergebnis erzeugt. |
30 | LongToIntFunction Stellt eine Funktion dar, die ein langwertiges Argument akzeptiert und ein intwertiges Ergebnis erzeugt. |
31 | LongUnaryOperator Stellt eine Operation für einen einzelnen langwertigen Operanden dar, der ein langwertiges Ergebnis erzeugt. |
32 | ObjDoubleConsumer<T> Stellt eine Operation dar, die ein Objektwert- und ein Doppelwertargument akzeptiert und kein Ergebnis zurückgibt. |
33 | ObjIntConsumer<T> Stellt eine Operation dar, die ein Objektwert- und ein Int-Wert-Argument akzeptiert und kein Ergebnis zurückgibt. |
34 | ObjLongConsumer<T> Stellt eine Operation dar, die ein objektwertiges und ein langwertiges Argument akzeptiert und kein Ergebnis zurückgibt. |
35 | Predicate<T> Stellt ein Prädikat (Boolesche Funktion) eines Arguments dar. |
36 | Supplier<T> Repräsentiert einen Lieferanten von Ergebnissen. |
37 | ToDoubleBiFunction<T,U> Stellt eine Funktion dar, die zwei Argumente akzeptiert und ein doppeltwertiges Ergebnis erzeugt. |
38 | ToDoubleFunction<T> Stellt eine Funktion dar, die ein doppeltwertiges Ergebnis erzeugt. |
39 | ToIntBiFunction<T,U> Stellt eine Funktion dar, die zwei Argumente akzeptiert und ein int-wertiges Ergebnis erzeugt. |
40 | ToIntFunction<T> Stellt eine Funktion dar, die ein int-wertiges Ergebnis erzeugt. |
41 | ToLongBiFunction<T,U> Stellt eine Funktion dar, die zwei Argumente akzeptiert und ein langwertiges Ergebnis liefert. |
42 | ToLongFunction<T> Stellt eine Funktion dar, die ein langwertiges Ergebnis erzeugt. |
43 | UnaryOperator<T> Stellt eine Operation für einen einzelnen Operanden dar, die ein Ergebnis des gleichen Typs wie sein Operand erzeugt. |
Beispiel für eine funktionale Schnittstelle
Die Prädikat-Schnittstelle <T> ist eine funktionale Schnittstelle mit einem Methodentest (Objekt), um einen Booleschen Wert zurückzugeben. Diese Schnittstelle zeigt an, dass ein Objekt auf wahr oder falsch getestet wird.
Erstellen Sie das folgende Java-Programm mit einem Editor Ihrer Wahl, z. B. in C: \> JAVA.
Java8Tester.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 passed as parameter to test method of Predicate interface
// test method will always return true no matter what value n has.
System.out.println("Print all numbers:");
//pass n as parameter
eval(list, n->true);
// Predicate<Integer> predicate1 = n -> n%2 == 0
// n is passed as parameter to test method of Predicate interface
// test method will return true if n%2 comes to be zero
System.out.println("Print even numbers:");
eval(list, n-> n%2 == 0 );
// Predicate<Integer> predicate2 = n -> n > 3
// n is passed as parameter to test method of Predicate interface
// test method will return true if n is greater than 3.
System.out.println("Print numbers greater than 3:");
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 + " ");
}
}
}
}
Hier haben wir die Predicate-Schnittstelle übergeben, die eine einzelne Eingabe akzeptiert und Boolean zurückgibt.
Überprüfen Sie das Ergebnis
Kompilieren Sie die Klasse mit javac Compiler wie folgt -
C:\JAVA>javac Java8Tester.java
Führen Sie nun den Java8Tester wie folgt aus:
C:\JAVA>java Java8Tester
Es sollte die folgende Ausgabe erzeugen -
Print all numbers:
1
2
3
4
5
6
7
8
9
Print even numbers:
2
4
6
8
Print numbers greater than 3:
4
5
6
7
8
9