Rumah > Java > javaTutorial > teks badan

Lambdas di Jawa

Barbara Streisand
Lepaskan: 2024-11-19 16:38:03
asal
444 orang telah melayarinya

Lambdas in Java

Lambdas di Jawa

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)
Salin selepas log masuk

Contoh

(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;
Salin selepas log masuk

Pendakap kerinting diperlukan hanya apabila badan fungsi mengandungi lebih daripada satu pernyataan. Contohnya:

(int x, int y) -> { return x * y; }
Salin selepas log masuk

Boleh ditulis sebagai:

(int x, int y) -> return x * y;
Salin selepas log masuk

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.

Contoh

  1. Fungsi dengan parameter (dengan jenis yang diisytiharkan):
   (int x, int y) -> { return x * y; }
Salin selepas log masuk
  1. Fungsi dengan parameter (tanpa jenis yang diisytiharkan):
   (x, y) -> { return x * y; }
Salin selepas log masuk
  1. Fungsi tanpa parameter:
   () -> System.out.println(new Date());
Salin selepas log masuk

Jika tiada kata kunci pulangan digunakan, jenis pulangan fungsi disimpulkan sebagai tidak sah:

(a) -> this.x = a;
Salin selepas log masuk

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.


Aplikasi Lambdas di Jawa

Benang

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();
Salin selepas log masuk

Koleksi

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));
Salin selepas log masuk

Pendengar

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...");
});
Salin selepas log masuk

Fungsi Generik

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);
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Lambdas di Jawa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan