2013-03-04 45 views
7

Tôi có thể viết bằng Java 8 bằng bao đóng để hỗ trợ phương thức lấy làm đối số một hàm và hàm trả về làm giá trị?Biểu thức Lambda và hàm bậc cao hơn

+0

[Đóng cửa cho đặc tả dự thảo Java (bởi Neal Gafter và Peter von der Ahé)] (http://javac.info/) –

+2

Trang web @Quoi That liên quan đến các đề xuất đã chết cách đây nhiều năm. Để biết tiến trình thực hiện Java 8, hãy xem http://lambdafaq.org –

+0

@MauriceNaftalin nhờ –

Trả lời

11

Trong Java Lambda API, lớp chính là java.util.function.Function.

Bạn có thể sử dụng tham chiếu đến giao diện này giống như cách bạn thực hiện với tất cả các tham chiếu khác: tạo biến đó làm biến, trả về kết quả tính toán và cứ như vậy.

Dưới đây là ví dụ khá đơn giản mà có thể giúp bạn:

public class HigherOrder { 

     public static void main(String[] args) { 
      Function<Integer, Long> addOne = add(1L); 

      System.out.println(addOne.apply(1)); //prints 2 

      Arrays.asList("test", "new") 
        .parallelStream() // suggestion for execution strategy 
        .map(camelize)  // call for static reference 
        .forEach(System.out::println); 
     } 

     private static Function<Integer, Long> add(long l) { 
      return (Integer i) -> l + i; 
     } 

     private static Function<String, String> camelize = (str) -> str.substring(0, 1).toUpperCase() + str.substring(1); 
    } 

Nếu bạn cần phải vượt qua hơn sau đó 1 tham số, xin hãy xem vào compose phương pháp, nhưng việc sử dụng của nó là khá khó khăn.

Nói chung từ đóng cửa ý kiến ​​của tôi và lambdas trong Java về cơ bản là cú pháp-đường, và họ dường như không có tất cả các khả năng lập trình chức năng.

+0

cảm ơn bạn rất nhiều vì câu trả lời! Bạn có biết nếu nó được áp dụng này: thêm (8) (10) vì làm điều này là rất nhàm chán: thêm (8) .apply (10) – xdevel2000

+0

Thật không may nó dường như không được phép, ít nhất - bây giờ – n1ckolas

+0

n1ckolas, xin lỗi , Tôi không tìm thấy bất kỳ phương pháp soạn thảo ... nơi tôi có thể tìm một ví dụ để viết một chức năng với các thông số hơn? – xdevel2000