Java - Ekspresi Lambda
Halo teman-teman, para ahli Java masa depan! Hari ini, kita akan mengemban perjalanan yang menarik ke dunia Ekspresi Lambda. Jangan khawatir jika Anda baru saja memulai programming - saya akan mengarahkan Anda melalui konsep ini secara langkah demi langkah, sama seperti yang saya lakukan untuk ribuan murid selama tahun-tahun mengajar saya. Jadi, ambil secangkir kopi (atau teh, jika itu hal Anda), dan mari kita masuk ke dalam!
Apa Itu Ekspresi Lambda?
Bayangkan Anda di sebuah pesta, dan Anda ingin memberikan lelucon kepada teman Anda. Daripada menulis keseluruhan lelucon dan mengirimkan kertas itu ke sekeliling, tidakkah lebih mudah untuk hanya mengatakan itu secara lisan? Itu sebenarnya apa yang Ekspresi Lambda lakukan di Java - mereka menyediakan cara cepat dan ringkas untuk mengekspresikan contoh interface method tunggal (interface fungsi).
Ekspresi Lambda diperkenalkan di Java 8 untuk membawa beberapa keuntungan dari programming fungsi ke Java. Mereka membuat kode Anda lebih mudah dibaca, lebih ringkas, dan kadang-kadang lebih efisien.
Sintaks Ekspresi Lambda
Sintaks dasar dari Ekspresi Lambda tampak seperti ini:
(parameters) -> { body }
Itu seperti sebuah fungsi kecil tanpa nama. Mari kitauraikan ini:
-
parameters
: Ini adalah parameter masukan (jika ada) -
->
: Token panah ini digunakan untuk memisahkan parameter dari tubuh -
body
: Ini berisi kode yang akan dieksekusi
Karakteristik Ekspresi Lambda Java
- Type inference: Java biasanya bisa menentukan jenis parameter, jadi Anda tidak selalu perlu menspesifikasikan mereka.
- Ekspresi tunggal: Jika tubuh berisi hanya satu ekspresi, Anda dapat menghapus kurung kurawal.
- Banyak parameter: Anda dapat memiliki nol, satu, atau banyak parameter.
- Pernyataan return: Jika tubuh memiliki satu ekspresi, pernyataan return adalah opsional.
Contoh Ekspresi Lambda Java
Marilah kita lihat beberapa contoh untuk melihat bagaimana Ekspresi Lambda bekerja dalam praktek.
Contoh 1: Ekspresi Lambda Sederhana
// Cara tradisional
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("Hello, World!");
}
};
// Cara Lambda
Runnable lambdaRunnable = () -> System.out.println("Hello, Lambda World!");
// Menjalankan keduanya
runnable.run();
lambdaRunnable.run();
Dalam contoh ini, kita menciptakan objek Runnable
. Cara tradisional memerlukan kita untuk membuat kelas inner takterdefinisi, sedangkan cara Lambda jauh lebih ringkas. Keduanya akan mencetak pesan saat dijalankan.
Contoh 2: Lambda Dengan Parameter
interface MathOperation {
int operate(int a, int b);
}
public class LambdaExample {
public static void main(String[] args) {
MathOperation addition = (a, b) -> a + b;
MathOperation subtraction = (a, b) -> a - b;
System.out.println("10 + 5 = " + addition.operate(10, 5));
System.out.println("10 - 5 = " + subtraction.operate(10, 5));
}
}
Di sini, kita tentukan interface fungsi MathOperation
dan menggunakan Ekspresi Lambda untuk mengimplementasikan operasi penambahan dan pengurangan. Perhatikan betapa bersih dan mudah dibaca kode ini menjadi!
Rentang Ekspresi Lambda Java
Ekspresi Lambda memiliki rentang yang sama seperti kelas inner. Mereka dapat menangkap variabel dari lingkungan penutup, tetapi variabel ini harus secara efektif tetap (nilainya tidak berubah setelah inisialisasi).
public class ScopeExample {
public static void main(String[] args) {
int multiplier = 2;
IntUnaryOperator doubler = (n) -> n * multiplier;
System.out.println(doubler.applyAsInt(4)); // Outputs: 8
// Ini akan menyebabkan kesalahan:
// multiplier = 3;
}
}
Dalam contoh ini, multiplier
secara efektif tetap dan dapat digunakan dalam Ekspresi Lambda.
Menggunakan Konstanta Dalam Ekspresi Lambda
Konstanta dapat digunakan bebas dalam Ekspresi Lambda. Mereka adalah cara bagus untuk membuat Ekspresi Lambda Anda lebih fleksibel dan dapat digunakan berkali-kali.
public class ConstantExample {
private static final int MAGIC_NUMBER = 42;
public static void main(String[] args) {
IntSupplier magicSupplier = () -> MAGIC_NUMBER;
System.out.println("Nomor magis adalah: " + magicSupplier.getAsInt());
}
}
Di sini, kita menggunakan konstanta MAGIC_NUMBER
dalam Ekspresi Lambda. Ini adalah hal yang sepenuhnya sah dan tidak melanggar aturan cakupan.
Menggunakan Ekspresi Lambda Dalam Koleksi
Ekspresi Lambda benar-benar bercahaya saat bekerja dengan koleksi. Mereka dapat membuat kode Anda lebih mudah dibaca dan lebih ringkas. Marilah kita lihat beberapa contoh:
Mensortir Sebuah List
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
// Cara tradisional
Collections.sort(names, new Comparator<String>() {
@Override
public int compare(String a, String b) {
return b.compareTo(a);
}
});
// Cara Lambda
names.sort((a, b) -> b.compareTo(a));
System.out.println(names); // Outputs: [David, Charlie, Bob, Alice]
Mengiterasi Melalui Sebuah List
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
// Cara tradisional
for (Integer number : numbers) {
System.out.println(number);
}
// Cara Lambda
numbers.forEach(number -> System.out.println(number));
// Atau bahkan lebih ringkas
numbers.forEach(System.out::println);
Menyaring Sebuah List
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
// Mendapatkan bilangan genap
List<Integer> evenNumbers = numbers.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
System.out.println(evenNumbers); // Outputs: [2, 4, 6, 8, 10]
Dalam contoh ini terakhir, kita menggunakan API Stream bersamaan dengan Ekspresi Lambda untuk menyaring bilangan genap dari daftar kita. Metode filter
mengambil Predicate (sebuah fungsi yang mengembalikan boolean), yang kita sediakan menggunakan Ekspresi Lambda.
Kesimpulan
Dan di sana Anda punya nya, teman-teman! Kita telah mengemban perjalanan melalui negeri Ekspresi Lambda, dari sintaks dasar ke aplikasi praktis mereka dalam koleksi. Ingat, Ekspresi Lambda adalah seperti rempah-rempah dalam memasak - gunakan mereka bijaksana, dan mereka dapat membuat kode Anda menjadi lebih menarik (dan dengan menarik, saya maksudkan mudah dibaca dan efisien).
Seperti halnya konsep baru lainnya, kunci untuk menguasai Ekspresi Lambda adalah latihan. Jadi, pergi dan lambda-kan kode Anda! Dan ingat, meskipun Anda mengalami kesalahan di jalur, itu semua bagian dari proses belajar. Seperti yang saya selalu katakan kepada murid-murid saya, dalam programming, kesalahan adalah kesempatan untuk tumbuh dalam sembunyi.
Terus coding, terus belajar, dan yang paling penting, bersenang-senang dengan itu! Sampaijumpa lagi, ini adalah guru Java tetangga Anda yang menutup. Selamat coding!
Credits: Image by storyset