Tôi đã đọc một bài viết về Joel On Software về ý tưởng sử dụng các hàm bậc cao hơn để đơn giản hóa rất nhiều mã thông qua việc sử dụng bản đồ và giảm. Ông đã đề cập rằng điều này rất khó thực hiện trong Java. Bài viết: http://www.joelonsoftware.com/items/2006/08/01.htmlLàm cách nào để viết một hàm bậc cao hơn như bản đồ, hoặc giảm bớt trong java?
các ví dụ từ bài viết dưới đây, vòng qua một mảng, và sử dụng hàm fn đã được thông qua như là một cuộc tranh cãi trên mỗi phần tử trong mảng:
function map(fn, a)
{
for (i = 0; i < a.length; i++)
{
a[i] = fn(a[i]);
}
}
này sẽ được gọi tương tự vào thực tế dưới đây:
map(function(x){return x*2;}, a);
map(alert, a);
Lý tưởng tôi muốn viết chức năng bản đồ để hoạt động trên mảng hoặc Bộ sưu tập của bất kỳ loại nào nếu có thể.
Tôi đã tìm kiếm trên Internet và tôi gặp khó khăn khi tìm tài nguyên về chủ đề này. Thứ nhất, là các hàm ẩn danh có thể có trong java? Điều này có thể làm theo cách khác không? Nó sẽ có sẵn trong một phiên bản tương lai của java? Nếu có thể, làm thế nào tôi có thể làm điều đó? Tôi tưởng tượng rằng nếu điều này là không thể trong Java thì có một số loại 'mẫu'/kỹ thuật mà mọi người sử dụng để đạt được hiệu quả tương tự, như tôi tưởng tượng các hàm ẩn danh là một công cụ rất mạnh trong thế giới phần mềm. câu hỏi tương tự duy nhất tôi có thể tìm thấy là: Java generics - implementing higher order functions like map và nó hoàn toàn không có ý nghĩa với tôi.
Thực tế dường như nếu/khi Java cuối cùng nhận được các biểu thức lambda, chúng sẽ được chuyển đổi thành một lớp ẩn danh như vậy. – hammar