Java 8 Funzione Interfaccia
Interfaccia Funzione (interfaccia funzionale) è un metodo di avere un'interfaccia comune.
Interfaccia funzione può essere convertito in modo implicito un'espressione lambda.
Interfaccia funzione può supportare le funzioni esistenti lambda amichevole.
Prima di JDK 1.8 ha una funzione di interfaccia:
- 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 di recente aggiunto funzione di interfaccia:
- java.util.function
java.util.function Esso contiene molte classi, funzioni per supportare la programmazione Java, questo pacchetto di interfacce funzionali:
No. | Interfaccia e Descrizione |
---|---|
1 | BiConsumer <T, U> Esso rappresenta un'operazione che richiede due parametri di ingresso, e non restituisce alcun risultato |
2 | BiFunction <T, U, R> Esso rappresenta un metodo accetta due parametri di input, e restituisce un risultato |
3 | BinaryOperator <T> Agendo per conto di un operatore in due dello stesso tipo di operazione, e l'operatore restituisce lo stesso tipo di risultati |
4 | BiPredicate <T, U> Esso rappresenta un metodo di valore booleano due parametri |
5 | BooleanSupplier Esso rappresenta il valore booleano del risultato del fornitore |
6 | Consumatori <T> Rappresenta accetta un parametro di input e nessuna operazione ritorno |
7 | DoubleBinaryOperator Essa agisce per conto del funzionamento dell'operatore due valori doppi, e restituisce i risultati di un valore doppio. |
8 | DoubleConsumer Accetta un'operazione per conto di un doppio valore del parametro, e non restituisce un risultato. |
9 | DoubleFunction <R> Accettazione, a nome di un metodo doppio parametro, e restituisce il risultato |
10 | DoublePredicate Esso rappresenta un valore booleano del parametro ha un metodo di valore doppio |
11 | DoubleSupplier Valore rappresenta un fornitore di doppia struttura |
12 | DoubleToIntFunction Accetta un ingresso di tipo double e restituisce un risultato int. |
13 | DoubleToLongFunction Accetta un ingresso di tipo double e restituisce una lunga tipo di risultato |
14 | DoubleUnaryOperator Accetta un parametro per lo stesso tipo di doppio, tipo di ritorno è anche doppio. |
15 | Funzione <T, R> Accetta un parametro di input e restituisce un risultato. |
16 | IntBinaryOperator Accetta due parametri con lo stesso tipo int, il tipo di valore di ritorno è anche int. |
17 | IntConsumer Accetta un parametri di input int, senza valore di ritorno. |
18 | IntFunction <R> Accetta un parametro di ingresso di tipo int, e restituisce un risultato. |
19 | IntPredicate : Accetta un parametro di input int e restituisce un valore booleano del risultato. |
20 | IntSupplier Non ci sono argomenti e restituisce un risultato int. |
21 | IntToDoubleFunction Accetta un ingresso di tipo int, e restituisce un risultato di tipo double. |
22 | IntToLongFunction Accetta un ingresso di tipo int, e restituisce una lunga tipo di risultato. |
23 | IntUnaryOperator Accetta un parametro per lo stesso tipo int, il tipo di valore di ritorno è anche int. |
24 | LongBinaryOperator Esso accetta due parametri con lo stesso tipo di tempo, tipo di ritorno a lungo. |
25 | LongConsumer Ci vuole molto tipo di parametri di input, senza valore di ritorno. |
26 | LongFunction <R> Per accettare una lunga tipo di parametri di input e restituisce un risultato. |
27 | LongPredicate R prende un parametro di input lungo e restituisce un valore booleano risultati tipo di valore. |
28 | LongSupplier Nessun parametro e restituisce un valore risultato di tipo long. |
29 | LongToDoubleFunction Per accettare una lunga tipo di input e restituisce un risultato di tipo double. |
30 | LongToIntFunction Per accettare una lunga tipo di input e restituisce un risultato int. |
31 | LongUnaryOperator Esso accetta un parametro per lo stesso tipo di tempo, tipo di ritorno a lungo. |
32 | ObjDoubleConsumer <T> Accetta un tipo di oggetto e un doppio tipo di parametri di input, senza valore di ritorno. |
33 | ObjIntConsumer <T> Accetta un tipo di oggetto e di un parametri di input int, senza valore di ritorno. |
34 | ObjLongConsumer <T> Accetta un tipo di oggetto e una lunga tipo di parametri di input, senza valore di ritorno. |
35 | Predicate <T> Accetta un parametro di input e restituisce un risultato booleano. |
36 | Fornitore <T> Non ci sono parametri e restituisce un risultato. |
37 | ToDoubleBiFunction <T, U> Esso accetta due parametri di input e restituisce un risultato di tipo double |
38 | ToDoubleFunction <T> Accetta un parametro di input e restituisce un risultato di tipo double |
39 | ToIntBiFunction <T, U> Esso accetta due parametri di input e restituisce un risultato di tipo int. |
40 | ToIntFunction <T> Accetta un parametro di input e restituisce un risultato di tipo int. |
41 | ToLongBiFunction <T, U> Si accetta due parametri di input e restituisce una lunga tipo di risultato. |
42 | ToLongFunction <T> Accetta un parametro di input e restituisce una lunga tipo di risultato. |
43 | UnaryOperator <T> Accetta un parametro di tipo T, il tipo del valore di ritorno per T. |
esempio interfaccia funzionale
Predicate <T> interfaccia è un'interfaccia funzionale che accetta un parametro di input T, restituisce un risultato booleano.
L'interfaccia contiene diversi metodi predefiniti verranno combinati in altra logica dei predicati complessi (per esempio: AND, OR, NOT).
Questa interfaccia viene utilizzata per testare gli oggetti sono vere o false.
Possiamo dai seguenti esempi (Java8Tester.java) per capire l'interfaccia funzione predicato <T> uso:
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 + " "); } } } }
L'attuazione del script di cui sopra, l'uscita è:
$ 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