Java 8 Fungsi Antarmuka
Fungsi Interface (Antarmuka Fungsional) adalah metode yang memiliki antarmuka umum.
Fungsi antarmuka dapat implisit dikonversi ke ekspresi lambda.
Fungsi antarmuka dapat mendukung fungsi yang ada lambda ramah.
Sebelum JDK 1.8 memiliki antarmuka fungsi:
- 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 yang baru ditambahkan fungsi antarmuka:
- java.util.function
java.util.function Ini berisi banyak kelas, fungsi untuk mendukung pemrograman Java, paket ini dari antarmuka fungsional:
Tidak. | Antarmuka dan Deskripsi |
---|---|
1 | BiConsumer <T, U> Ini merupakan operasi yang mengambil dua parameter input, dan tidak menghasilkan apa-apa |
2 | BiFunction <T, U, R> Ini merupakan metode menerima dua parameter input, dan mengembalikan hasilnya |
3 | BinaryOperator <T> Bertindak atas nama operator di dua dari jenis yang sama operasi, dan operator mengembalikan jenis yang sama dari hasil |
4 | BiPredicate <T, U> Ini merupakan metode nilai boolean dua parameter |
5 | BooleanSupplier Ini merupakan nilai boolean dari hasil provider |
6 | Konsumen <T> Merupakan menerima parameter input dan tidak ada operasi kembali |
7 | DoubleBinaryOperator Hal ini bertindak atas nama operasi Operator dua nilai ganda, dan mengembalikan hasil nilai ganda. |
8 | DoubleConsumer Menerima operasi atas nama nilai ganda dari parameter, dan tidak kembali hasilnya. |
9 | DoubleFunction <R> Menerima atas nama metode parameter ganda, dan mengembalikan hasilnya |
10 | DoublePredicate Ini merupakan nilai boolean parameter memiliki metode nilai ganda |
11 | DoubleSupplier Nilai merupakan Provider struktur ganda |
12 | DoubleToIntFunction Menerima masukan tipe double dan mengembalikan hasil int. |
13 | DoubleToLongFunction Menerima masukan tipe double dan mengembalikan jenis panjang hasil |
14 | DoubleUnaryOperator Menerima parameter untuk jenis yang sama dari dua, jenis kembali juga ganda. |
15 | Fungsi <T, R> Menerima parameter input dan mengembalikan hasilnya. |
16 | IntBinaryOperator Menerima dua parameter dengan tipe int sama, jenis nilai kembali juga int. |
17 | IntConsumer Menerima sebuah parameter masukan int, tidak ada nilai kembali. |
18 | IntFunction <R> Menerima parameter masukan dari tipe int, dan mengembalikan hasilnya. |
19 | IntPredicate : Menerima parameter input int dan mengembalikan nilai Boolean dari hasilnya. |
20 | IntSupplier Tidak ada argumen dan mengembalikan hasil int. |
21 | IntToDoubleFunction Menerima masukan dari tipe int, dan mengembalikan hasil tipe ganda. |
22 | IntToLongFunction Menerima masukan dari tipe int, dan mengembalikan jenis panjang hasil. |
23 | IntUnaryOperator Menerima parameter untuk tipe int sama, jenis nilai kembali juga int. |
24 | LongBinaryOperator Ia menerima dua parameter dengan tipe yang sama panjang, jenis kembali lama. |
25 | LongConsumer Dibutuhkan tipe panjang parameter masukan, tidak ada nilai kembali. |
26 | LongFunction <R> Untuk menerima jenis panjang parameter input dan mengembalikan hasilnya. |
27 | LongPredicate R mengambil parameter masukan panjang dan mengembalikan Boolean hasil jenis nilai. |
28 | LongSupplier Tidak ada parameter dan pengembalian nilai hasil tipe lama. |
29 | LongToDoubleFunction Untuk menerima jenis panjang input dan mengembalikan hasil tipe ganda. |
30 | LongToIntFunction Untuk menerima jenis panjang input dan mengembalikan hasil int. |
31 | LongUnaryOperator Ini menerima parameter untuk jenis yang sama panjang, jenis kembali lama. |
32 | ObjDoubleConsumer <T> Menerima jenis objek dan tipe ganda parameter masukan, tidak ada nilai kembali. |
33 | ObjIntConsumer <T> Menerima jenis objek dan parameter masukan int, tidak ada nilai kembali. |
34 | ObjLongConsumer <T> Menerima jenis objek dan jenis panjang parameter masukan, tidak ada nilai kembali. |
35 | Predikat <T> Menerima parameter input dan mengembalikan hasil Boolean. |
36 | Pemasok <T> Tidak ada parameter dan kembali hasilnya. |
37 | ToDoubleBiFunction <T, U> Ia menerima dua parameter input dan mengembalikan hasil tipe ganda |
38 | ToDoubleFunction <T> Menerima parameter input dan mengembalikan hasil tipe ganda |
39 | ToIntBiFunction <T, U> Ia menerima dua parameter input dan mengembalikan hasil tipe int. |
40 | ToIntFunction <T> Menerima parameter input dan mengembalikan hasil tipe int. |
41 | ToLongBiFunction <T, U> Ia menerima dua parameter input dan mengembalikan tipe lama hasil. |
42 | ToLongFunction <T> Menerima parameter input dan mengembalikan tipe lama hasil. |
43 | UnaryOperator <T> Menerima parameter tipe T, tipe nilai kembali untuk T. |
Fungsional misalnya antarmuka
Predikat <T> antarmuka adalah antarmuka fungsional yang menerima parameter input T, mengembalikan hasil boolean.
antarmuka berisi beberapa metode standar akan digabungkan menjadi Predikat logika kompleks lainnya (misalnya: AND, OR, NOT).
Antarmuka ini digunakan untuk menguji objek yang benar atau salah.
Kita bisa dengan contoh berikut (Java8Tester.java) untuk memahami antarmuka fungsi Predikat <T> menggunakan:
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 + " "); } } } }
Pelaksanaan script di atas, output:
$ 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