2014-11-06 27 views
21

Tôi vừa mới bắt đầu sử dụng Java 8 và tôi tự hỏi liệu có cách viết phương thức trả về Function không?Trả về Lambda từ Phương thức trong Java 8?

Ngay bây giờ tôi có phương pháp như dưới đây:

Function<Integer, String> getMyFunction() { 
    return new Function<Integer, String>() { 
    @Override public String apply(Integer integer) { 
     return "Hello, world!" 
    } 
    } 
} 

Có cách nào để viết rằng cô đọng hơn trong Java 8? Tôi đã hy vọng điều này sẽ làm việc nhưng nó không:

Function<Integer, String> getMyFunction() { 
    return (it) -> { return "Hello, world: " + it } 
} 

Trả lời

25

Loại bỏ các tuyên bố trở lại của bạn bên trong định nghĩa chức năng của bạn:

Function<Integer, String> getMyFunction() { 
    return (it) -> "Hello, world: " + it; 
} 
13

Bạn đang thiếu dấu hai chấm bán:

return (it) -> { return "Hello, world: " + it; }; 

Mặc dù như đã lưu ý, nó có thể được rút ngắn thành:

return it -> "Hello, world: " + it; 
2

Bạn có thể viết nó chỉ đơn giản như thế:

Function<Integer, String> function = n -> "Hello, world " + n; 
1

Vì vậy, câu trả lời cho 99% các trường hợp đã được đưa ra bởi @assylias

Bạn đang thiếu dấu hai chấm bán:

return (it) -> { return "Hello, world: " + it; }; Although as noted it có thể được rút ngắn thành:

return it -> "Hello, world: " + it;

Tuy nhiên, tôi nghĩ rằng nó là giá trị nó để thêm rằng, nếu bạn muốn gán lambda của bạn để một biến (để sử dụng sau này). Bạn có thể làm như vậy bằng cách gõ:

Callable<YourClass> findIt =() -> returnInstanceOfYourClass(); 

Và sau đó bạn có thể dễ dàng sử dụng nó, một ví dụ về việc sử dụng như:

if(dontNeedzToWrap()) { 
       return findIt.call(); 
    } 
return Wrapp.withTransaction(() -> findIt.call()); 

nhất định, điều này có thể được thậm chí còn làm đơn giản hơn nếu phương pháp Wrapp.withTransaction() chấp nhận cùng một loại Callable là tham số. (tôi sử dụng này cho JPA atm)

3

Tôi muốn chỉ ra rằng nó có thể thích hợp hơn để sử dụng được xây dựng trong IntFunction trong trường hợp này:

IntFunction<String> getMyFunction() { 
    return it -> "Hello, world: " + it; 
} 

IntFunction là một phần của standard API for functional interfaces trong đó xác định một loạt các tốt để có giao diện, chủ yếu liên quan đến Java nguyên thủy.

Các vấn đề liên quan