Alasan Anda mengalami kesulitan dalam memahami arti antarmuka fungsional seperti yang ada di dalamnya java.util.functionadalah karena antarmuka yang ditentukan di sini tidak memiliki arti! Mereka hadir terutama untuk mewakili struktur , bukan semantik .
Ini tidak umum untuk sebagian besar Java API. Java API yang khas, seperti kelas atau antarmuka, memiliki arti, dan Anda dapat mengembangkan model mental untuk apa yang diwakilinya dan menggunakannya untuk memahami operasi di dalamnya. Pertimbangkan java.util.Listmisalnya. A Listadalah wadah benda lain. Mereka memiliki urutan dan indeks. Jumlah objek yang terdapat dalam daftar dikembalikan oleh size(). Setiap objek memiliki indeks dalam kisaran 0..size-1 (inklusif). Objek pada indeks i dapat diambil dengan memanggil list.get(i). Dan seterusnya.
Antarmuka fungsional java.util.functiontidak memiliki arti seperti itu. Sebaliknya, mereka adalah antarmuka yang hanya mewakili struktur suatu fungsi, seperti jumlah argumen, jumlah nilai yang dikembalikan, dan (terkadang) apakah argumen atau nilai yang dikembalikan adalah primitif. Dengan demikian kita memiliki sesuatu seperti Function<T,R>yang merupakan fungsi yang mengambil satu argumen tipe T dan mengembalikan nilai tipe R . Itu dia. Apa fungsi itu? Yah, itu bisa melakukan apa saja ... selama itu membutuhkan satu argumen dan mengembalikan satu nilai. Itulah mengapa spesifikasi untuk Function<T,R>tidak lebih dari "Merupakan fungsi yang menerima satu argumen dan menghasilkan hasil."
Jelasnya, ketika kita menulis kode, itu memiliki makna, dan makna itu harus datang dari suatu tempat. Dalam kasus antarmuka fungsional, artinya berasal dari konteks di mana mereka digunakan. Antarmuka Function<T,R>tidak memiliki arti dalam isolasi. Namun, di java.util.Map<K,V>API, ada yang berikut ini:
V computeIfAbsent(K key, Function<K,V> mappingFunction)
(karakter pengganti dieliminasi untuk singkatnya)
Ah, penggunaan Functionini sebagai "fungsi pemetaan". Apa fungsinya? Dalam konteks ini, jika keybelum ada di peta, fungsi pemetaan dipanggil dan diberikan kunci dan diharapkan menghasilkan nilai, dan pasangan kunci-nilai yang dihasilkan dimasukkan ke dalam peta.
Jadi, Anda tidak dapat melihat spesifikasi untuk Function(atau antarmuka fungsional lainnya, dalam hal ini) dan mencoba memahami apa artinya. Anda harus melihat di mana mereka digunakan di API lain untuk memahami apa artinya, dan arti itu hanya berlaku untuk konteks itu.
ConsumerdanSupplierAnda juga dapat mencari tutorial untukConsumer…