Latest web development tutorials

Java 8 Fungsi Antarmuka

Java 8 fitur baru Java 8 fitur baru


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 

Java 8 fitur baru Java 8 fitur baru