Java 8 Funktions-Interface
Funktion Interface (Functional Interface) ist ein Verfahren, eine gemeinsame Grenzfläche aufweist.
Funktionsschnittstelle kann implizit in einen Lambda-Ausdruck umgewandelt werden.
Funktionsschnittstelle können vorhandene Funktionen freundliche Lambda unterstützen.
Vor JDK 1.8 hat eine Funktion Schnittstelle:
- 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 Funktion Schnittstelle hinzugefügt:
- java.util.function
java.util.function Es enthält viele Klassen, Funktionen der Java-Programmierung zu unterstützen, dieses Paket von funktionalen Schnittstellen:
Nein. | Schnittstelle und Beschreibung |
---|---|
1 | BiConsumer <T, U> Es stellt eine Operation, die zwei Eingabeparameter nimmt, und liefert keine Ergebnisse |
2 | Bifunktionellen <T, U, R> Sie stellt ein Verfahren zwei Eingabeparameter annimmt, und gibt ein Ergebnis |
3 | BinaryOperator <T> Die im Namen eines Benutzers in zwei der gleichen Art der Operation, und die Bedienungsperson gibt die gleiche Art der Ergebnisse |
4 | BiPredicate <T, U> Es stellt eine Methode boolean Wert zwei Parameter |
5 | BooleanSupplier Er stellt den Booleschen Wert des Ergebnisses des Anbieters |
6 | Consumer <T> Stellt akzeptiert einen Eingabeparameter und keinen Rückgabe Betrieb |
7 | DoubleBinaryOperator Es handelt im Namen der beiden Doppelwerte Operator Operation, und gibt die Ergebnisse eines doppelten Wert. |
8 | DoubleConsumer Akzeptiert eine Operation im Auftrag eines doppelten Wert des Parameters, und kein Ergebnis zurück. |
9 | Doppelfunktion <R> Annehmen im Namen eines Doppel Parameter-Methode, und gibt das Ergebnis |
10 | DoublePredicate Es stellt ein boolean Wert des Parameters ein Doppelwertmethode hat |
11 | DoubleSupplier Wert für eine Doppelstruktur Provider |
12 | DoubleToIntFunction Akzeptiert ein Doppeltyp Eingabe und gibt einen int Ergebnis. |
13 | DoubleToLongFunction Akzeptiert ein Doppeltyp Eingabe und gibt einen langen Art des Ergebnisses |
14 | DoubleUnaryOperator Akzeptiert einen Parameter für die gleiche Art von Doppel, Rückgabetyp ist ebenfalls doppelt. |
15 | Funktion <T, R> Akzeptiert ein Eingabeparameter und gibt ein Ergebnis. |
16 | IntBinaryOperator Nimmt zwei Parameter mit dem gleichen Typ int, ist der Rückgabewert Typ auch int. |
17 | IntConsumer Akzeptiert ein int Eingangsparameter, keinen Rückgabewert. |
18 | IntFunction <R> Akzeptiert einen Eingangsparameter vom Typ int und gibt ein Ergebnis zurück. |
19 | IntPredicate : Nimmt eine int Eingabeparameter und gibt einen Booleschen Wert des Ergebnisses. |
20 | IntSupplier Keine Argumente und gibt einen int Ergebnis. |
21 | IntToDoubleFunction Nimmt eine Eingabe vom Typ int und gibt ein Ergebnis vom Typ double. |
22 | IntToLongFunction Nimmt eine Eingabe vom Typ int und gibt eine lange Art des Ergebnisses. |
23 | IntUnaryOperator Akzeptiert einen Parameter für den gleichen Typ int, ist der Rückgabewert Typ auch int. |
24 | LongBinaryOperator Er nimmt zwei Parameter mit der gleichen Art von langen, Rückgabetyp für lange. |
25 | LongConsumer Es dauert eine lange Art von Eingabeparametern, kein Rückgabewert. |
26 | LongFunction <R> Um eine lange Art von Eingabeparameter akzeptieren und gibt ein Ergebnis zurück. |
27 | LongPredicate R nimmt einen langen Eingabeparameter und gibt einen Booleschen Wert Typ Ergebnisse. |
28 | LongSupplier Keine Parameter und liefert einen Ergebniswert vom Typ long. |
29 | LongToDoubleFunction Um eine lange Art der Eingabe akzeptieren und gibt ein Ergebnis vom Typ double. |
30 | LongToIntFunction Um eine lange Art der Eingabe akzeptieren und gibt einen int Ergebnis. |
31 | LongUnaryOperator Er akzeptiert einen Parameter für die gleiche Art von langen, Rückgabetyp für lange. |
32 | ObjDoubleConsumer <T> Akzeptiert ein Objekttyp und eine doppelte Art von Eingabeparametern, kein Rückgabewert. |
33 | ObjIntConsumer <T> Akzeptiert ein Objekttyp und ein int Eingangsparameter, keinen Rückgabewert. |
34 | ObjLongConsumer <T> Akzeptiert ein Objekttyp und eine lange Art von Eingabeparametern, kein Rückgabewert. |
35 | Predicate <T> Akzeptiert ein Eingabeparameter und gibt einen Booleschen Ergebnis. |
36 | Lieferant <T> Keine Parameter und gibt ein Ergebnis zurück. |
37 | ToDoubleBiFunction <T, U> Er nimmt zwei Eingabeparameter und gibt ein Ergebnis vom Typ Doppel |
38 | ToDoubleFunction <T> Akzeptiert ein Eingabeparameter und gibt ein Ergebnis vom Typ Doppel |
39 | ToIntBiFunction <T, U> Er nimmt zwei Eingabeparameter und gibt ein Ergebnis vom Typ int. |
40 | ToIntFunction <T> Akzeptiert ein Eingabeparameter und gibt ein Ergebnis vom Typ int. |
41 | ToLongBiFunction <T, U> Er nimmt zwei Eingabeparameter und gibt einen langen Art des Ergebnisses. |
42 | ToLongFunction <T> Akzeptiert ein Eingabeparameter und gibt einen langen Art des Ergebnisses. |
43 | UnaryOperator <T> Nehmen Sie einen Parameter des Typs T, den Typ des Rückgabewert für T. |
Funktionsschnittstelleninstanz
Predicate <T> Schnittstelle ist eine funktionale Schnittstelle, die einen Eingangsparameter T annimmt, gibt einen booleschen Ergebnis.
Die Schnittstelle enthält mehrere Standardmethoden in andere komplexe Prädikatenlogik kombiniert werden (zum Beispiel: AND, OR, NOT).
Diese Schnittstelle wird verwendet, um Objekte wahr oder falsch sind zu testen.
Wir können durch die folgenden Beispiele (Java8Tester.java) zu verstehen, die Funktion Schnittstelle Predicate <T> verwenden:
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 是一个参数传递到 Predicate 接口的 test 方法 // n 如果存在则 test 方法返回 true System.out.println("输出所有数据:"); // 传递参数 n eval(list, n->true); // Predicate<Integer> predicate1 = n -> n%2 == 0 // n 是一个参数传递到 Predicate 接口的 test 方法 // 如果 n%2 为 0 test 方法返回 true System.out.println("输出所有偶数:"); eval(list, n-> n%2 == 0 ); // Predicate<Integer> predicate2 = n -> n > 3 // n 是一个参数传递到 Predicate 接口的 test 方法 // 如果 n 大于 3 test 方法返回 true System.out.println("输出大于 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 + " "); } } } }
Die Umsetzung des obigen Skripts, Ausgabe lautet:
$ javac Java8Tester.java $ java Java8Tester 输出所有数据: 1 2 3 4 5 6 7 8 9 输出所有偶数: 2 4 6 8 输出大于 3 的所有数字: 4 5 6 7 8 9