Java - Ekspresi Lambda
Penggunaan khas yang dapat kita lihat adalah menulis seperti ini:
Comparator<Developer> byName = new Comparator<Developer>() {
@Override
public int compare(Developer o1, Developer o2) {
return o1.getName().compareTo(o2.getName());
}
};
Kita dapat menggunakan ekspresi lambda untuk meringkas kode seperti ini:
Comparator<Developer> byName =
(Developer o1, Developer o2) -> o1.getName().compareTo(o2.getName());
Ungkapan Lambda tidak mengubah rangkaian masalah yang bisa Anda selesaikan dengan Java pada umumnya, tapi pasti membuat pemecahan masalah tertentu lebih mudah, hanya untuk alasan yang sama kita tidak memprogram dalam bahasa assembly lagi. Menghapus tugas berlebihan dari pekerjaan pemrogram membuat hidup lebih mudah dan memungkinkan melakukan hal-hal yang bahkan tidak Anda sentuh sebaliknya, hanya untuk jumlah kode yang harus Anda hasilkan (secara manual).
Tapi ekspresi lambda tidak hanya menghemat kode. Ekspresi Lambda memungkinkan Anda mendefinisikan fungsi, sesuatu yang bisa digunakan oleh kelas batin anonim sebagai solusi sebelumnya, karena itulah Anda dapat mengganti kelas dalam anonim dalam kasus ini, namun tidak secara umum.
Yang paling menonjol, ekspresi lambda didefinisikan secara independen terhadap antarmuka fungsional yang akan mereka ubah, sehingga tidak ada anggota yang dapat diidentifikasikan yang dapat mereka akses, lebih jauh lagi, mereka tidak dapat mengakses instance dari tipe yang mengimplementasikan antarmuka fungsional. Dalam sebuah ekspresi lambda, ini dan super memiliki arti yang sama seperti dalam konteks sekitarnya, lihat juga jawaban ini. Selain itu, Anda tidak dapat membuat variabel lokal baru yang membayangi variabel lokal dari konteks sekitarnya. Untuk tugas yang dimaksudkan dalam mendefinisikan sebuah fungsi, ini menghilangkan banyak sumber kesalahan, namun juga menyiratkan bahwa untuk kasus penggunaan lainnya, mungkin ada kelas dalam anonim yang tidak dapat diubah menjadi ekspresi lambda, bahkan jika menerapkan antarmuka fungsional.
Selanjutnya, construct new Type () {...} menjamin untuk menghasilkan instance baru yang berbeda (seperti yang baru selalu dilakukan). Contoh kelas dalam anonim selalu menyimpan referensi ke instance luarnya jika dibuat dalam konteks non-statis. Sebaliknya, ekspresi lambda hanya menangkap referensi untuk hal ini bila diperlukan, yaitu jika mereka mengakses anggota non-statis ini atau anggota. Dan mereka menghasilkan contoh identitas yang sengaja tidak ditentukan, yang memungkinkan pelaksanaannya memutuskan kapan harus menggunakan kembali contoh yang ada (lihat juga "Apakah ekspresi lambda membuat objek di tumpukan setiap kali dijalankan?").
Perbedaan ini berlaku untuk contoh Anda. Konstruksi kelas anonim Anda akan selalu menghasilkan instance baru, juga bisa menangkap referensi ke instance luar, sedangkan (Developer o1, Developer o2) -> o1.getName (). CompareTo (o2.getName ()) adalah sebuah ekspresi lambda yang tidak menangkap yang akan mengevaluasi secara tunggal dalam implementasi tipikal. Selanjutnya, file tersebut tidak menghasilkan file kelas. Pada hard drive Anda.
Mengingat perbedaan mengenai keduanya, semantik dan kinerja, ekspresi lambda dapat mengubah cara pemrogram akan memecahkan masalah tertentu di masa depan, tentu saja, juga karena API baru mencakup gagasan pemrograman fungsional yang memanfaatkan fitur bahasa baru.
https://stackoverflow.com/questions/47407180/do-lambda-expressions-have-any-use-other-than-saving-lines-of-code