Lambdas ialah fungsi yang tidak diisytiharkan, bermakna ia tidak perlu diisytiharkan secara eksplisit untuk digunakan. Tidak perlu menentukan nama, parameter, pengubah suai akses atau jenis pulangan. Pada asasnya, lambda ialah cara yang lebih mudah untuk melaksanakan antara muka dengan satu kaedah.
Di Java, sintaks asas fungsi lambda ialah:
(args) -> (body)
(int x, int y) -> { return x * y; } Aluno display = (Pessoa p) -> { System.out.println(p.idade); } () -> System.out.println(new Date()); () -> { return 25.789; } x -> x < 100;
Pendakap kerinting diperlukan hanya apabila badan fungsi mengandungi lebih daripada satu pernyataan. Contohnya:
(int x, int y) -> { return x * y; }
Boleh ditulis sebagai:
(int x, int y) -> return x * y;
Kedua-dua bentuk menghasilkan hasil yang sama.
Fungsi Lambda boleh mempunyai parameter atau tiada sama sekali. Jenis parameter juga boleh diabaikan, kerana Java akan membuat kesimpulan jenisnya.
(int x, int y) -> { return x * y; }
(x, y) -> { return x * y; }
() -> System.out.println(new Date());
Jika tiada kata kunci pulangan digunakan, jenis pulangan fungsi disimpulkan sebagai tidak sah:
(a) -> this.x = a;
Perlu ambil perhatian bahawa lambda berbeza daripada kelas tanpa nama. Ini boleh diperhatikan dalam fail .class yang dihasilkan. Tidak seperti kelas tanpa nama, lambdas tidak menjana berbilang fail .class untuk setiap penggunaan.
Lambdas memudahkan kod dengan mengurangkan verbositi apabila bekerja dengan urutan.
// Implementing the Runnable interface and creating a thread with it Runnable e = new Runnable() { public void run() { System.out.println(new Date()); } }; new Thread(e).start(); // The same implementation using a lambda expression Runnable e = () -> System.out.println(new Date()); new Thread(e).start(); // Even more concise new Thread( () -> System.out.println(new Date()) ).start();
Lambdas memudahkan fungsi seperti mengisih dan menapis dalam koleksi.
// Print all elements in a list List<String> list = Arrays.asList("João", "Ana", "Maria", "Cesar"); for (String s : list) { System.out.println(s); } // Using lambdas list.forEach(s -> System.out.println(s)); // Lambda with multiple statements list.forEach(s -> { if (StringUtils.equals("Cesar", s)) { System.out.println(s); } }); // Conventional sorting Collections.sort(list, new Comparator<String>() { @Override public int compare(String s1, String s2) { return s1.compareTo(s2); } }); list.forEach(p -> System.out.println(p)); // Sorting using lambdas Collections.sort(list, (String s1, String s2) -> s1.compareTo(s2)); list.forEach(p -> System.out.println(p));
Lambdas memudahkan kod dalam pendengar, yang melaksanakan corak reka bentuk Pemerhati.
// Listening to an action on a button in a Swing window button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("Some actions..."); } }); // Using lambdas button.addActionListener((e) -> { System.out.println("Some actions..."); });
Lambdas boleh digunakan dalam fungsi generik untuk menyelesaikan masalah dengan menghantar ungkapan lambda sebagai parameter.
public class Main { /* * A method that tests a condition */ public static void testExpression(List<String> list, Predicate<String> predicate) { list.forEach(n -> { if (predicate.test(n)) { System.out.println(n); } }); } /* * Calling the method with a lambda */ public static void main(String[] args) { List<String> list = Arrays.asList("João", "Ana", "Maria", "Cesar"); // Prints "Cesar" if it exists testExpression(list, (n) -> StringUtils.equals("Cesar", n)); // Prints the entire list testExpression(list, (n) -> true); // Prints nothing testExpression(list, (n) -> false); } }
Atas ialah kandungan terperinci Lambdas di Jawa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!