Rumah >Java >javaTutorial >Mengapakah `Comparator.reversed()` Gagal dengan Ungkapan Lambda dalam Pengisihan Java?

Mengapakah `Comparator.reversed()` Gagal dengan Ungkapan Lambda dalam Pengisihan Java?

Barbara Streisand
Barbara Streisandasal
2024-12-03 21:38:12550semak imbas

Why Does `Comparator.reversed()` Fail with Lambda Expressions in Java Sorting?

Mengapa Comparator.reversed() Gagal dengan Lambdas

Apabila mengisih senarai objek Pengguna menggunakan Comparator.comparing dengan ungkapan lambda, ralat mungkin berlaku:

userList.sort(Comparator.comparing(u -> u.getName()).reversed()); // Compiler error

Ini disebabkan oleh pengehadan dalam pengkompil jenis mekanisme inferens. Pengkompil bergelut untuk menentukan jenis argumen lambda 'u'.

Dalam contoh berikut, menggunakan rujukan kaedah membolehkan pengkompil membuat kesimpulan jenis sasaran dan mengelakkan ralat:

userList.sort(Comparator.comparing(User::getName).reversed()); // works

Rujukan kaedah menyediakan maklumat jenis tambahan, yang digunakan oleh pengkompil untuk membuat kesimpulan jenis 'u' sebagai Pengguna.

Untuk mengelakkan ralat semasa menggunakan a lambda, anda boleh menyatakan secara eksplisit jenis hujah lambda:

userList.sort(Comparator.comparing((User u) -> u.getName()).reversed());

Dalam keluaran pengkompil akan datang, isu ini mungkin ditangani dan ralat mungkin tidak berlaku lagi.

Atas ialah kandungan terperinci Mengapakah `Comparator.reversed()` Gagal dengan Ungkapan Lambda dalam Pengisihan Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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