Function dan BiFunction
Transformasikan nilai secara fungsional.
Function dan BiFunction adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.
Yang Direpresentasikan oleh Function
Function<T, R> adalah antarmuka transformasi inti dalam java.util.function. Antarmuka ini menerima satu argumen bertipe T dan mengembalikan hasil bertipe R.
- Metode abstrak tunggalnya adalah
R apply(T t). - Antarmuka ini memodelkan pemetaan murni dari masukan ke keluaran.
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<String, Integer> length = s -> s.length();
System.out.println(length.apply("hello"));
}
}Memanggil apply
Anda memanggil Function dengan memanggil apply. Isi lambda merupakan logika transformasinya.
- Tipe masukan dan keluaran dapat berbeda.
- Referensi metode seperti
String::toUpperCasedapat menggantikan lambda.
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<String, String> upper = String::toUpperCase;
System.out.println(upper.apply("java"));
}
}Komposisi andThen
andThen merangkai fungsi: hasil fungsi pertama menjadi masukan bagi fungsi kedua.
f.andThen(g)berarti g(f(x)).- Urutannya terbaca dari kiri ke kanan.
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<Integer, Integer> times2 = n -> n * 2;
Function<Integer, Integer> plus3 = n -> n + 3;
System.out.println(times2.andThen(plus3).apply(5));
}
}Komposisi compose
compose menjalankan fungsi argumen terlebih dahulu.
f.compose(g)berarti f(g(x)).- Ini merupakan kebalikan dari
andThen.
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<Integer, Integer> times2 = n -> n * 2;
Function<Integer, Integer> plus3 = n -> n + 3;
System.out.println(times2.compose(plus3).apply(5));
}
}Function.identity
Function.identity() mengembalikan fungsi yang memberikan kembali masukannya tanpa perubahan.
- Berguna dalam pengumpul aliran dan pemetaan bawaan.
- Setara dengan
x -> x.
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<String, String> id = Function.identity();
System.out.println(id.apply("unchanged"));
}
}Mengenal BiFunction
BiFunction<T, U, R> menerima dua argumen dan mengembalikan satu hasil.
- Metodenya adalah
R apply(T t, U u). - Sangat berguna untuk menggabungkan dua nilai, misalnya saat menggabungkan peta.
import java.util.function.BiFunction;
public class Main {
public static void main(String[] args) {
BiFunction<Integer, Integer, Integer> add = (a, b) -> a + b;
System.out.println(add.apply(4, 6));
}
}BiFunction dengan Tipe Berbeda
Ketiga parameter tipe pada BiFunction dapat berbeda satu sama lain.
- Di sini kita menggabungkan
StringdanintmenjadiString.
import java.util.function.BiFunction;
public class Main {
public static void main(String[] args) {
BiFunction<String, Integer, String> repeat = (s, n) -> s.repeat(n);
System.out.println(repeat.apply("ab", 3));
}
}BiFunction danThen
BiFunction juga mendukung andThen, yang menerima Function berargumen tunggal untuk memproses hasil lebih lanjut.
- Tidak ada
composepadaBiFunctionkarena metode itu memerlukan dua masukan.
import java.util.function.BiFunction;
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
BiFunction<Integer, Integer, Integer> add = (a, b) -> a + b;
Function<Integer, String> label = n -> "sum=" + n;
System.out.println(add.andThen(label).apply(7, 8));
}
}Fungsi dalam Koleksi
Banyak API menerima Function. Misalnya, Map.computeIfAbsent menerima fungsi pemetaan untuk kunci yang tidak ada.
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<String, Integer> lengths = new HashMap<>();
lengths.computeIfAbsent("hello", String::length);
System.out.println(lengths);
}
}Menyimpan Fungsi dalam Variabel
Karena fungsi adalah objek, Anda dapat menyimpannya, meneruskannya, dan mengembalikannya. Inilah dasar Java bergaya fungsional.
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<Integer, Integer> square = n -> n * n;
Function<Integer, Integer> cube = n -> n * n * n;
Function<Integer, Integer> chosen = square;
System.out.println(chosen.apply(5));
}
}Membangun Alur Transformasi
Merangkai andThen berulang kali akan membangun alur transformasi yang mudah dibaca dan digunakan kembali.
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<String, String> trim = String::trim;
Function<String, String> upper = String::toUpperCase;
Function<String, Integer> len = String::length;
System.out.println(trim.andThen(upper).andThen(len).apply(" abc "));
}
}Pemeriksaan Singkat
Apa yang dihitung oleh f.andThen(g).apply(x)?
Rangkuman
Anda telah mempelajari antarmuka transformasi inti:
Function<T,R>memetakan satu nilai denganapply.andThenmerangkai ke depan (g(f(x)));composemerangkai ke belakang (f(g(x))).Function.identity()mengembalikan masukannya.BiFunction<T,U,R>menangani dua masukan dan mendukungandThen, tetapi tidak mendukungcompose.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Function dan BiFunction” gratis?
Ya — teks lengkap “Function dan BiFunction” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Function dan BiFunction”?
Transformasikan nilai secara fungsional. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Java Academy?
Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Function dan BiFunction” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Function dan BiFunction
- Supplier dan Consumer
- Predicate dan Komposisi
- Antarmuka Fungsional Kustom