2011-01-23 48 views
10

Gần đây tôi đã chuyển từ C# sang Java [một lần nữa]. Nhưng tôi rất nhớ những biểu thức lambda và những thứ như IEnumerable.Foreach of C#. Vì vậy, tôi đang tìm kiếm một thư viện biểu thức lambda trong Java.Biểu thức Lambda của .NET trong Java

có thư viện nào tốt hơn LambdaJ không?

Ngoài ra, Clojure còn có thể khắc phục trực tiếp trong các chương trình Java? Đó là tôi có thể trộn mã clojure trong các hàm Java không?

+0

Thú vị ... C# thậm chí không giao hàng với 'IEnumerable.Foreach' – Gabe

+2

@Gabe - bạn đúng về điểm đạo đức. Tôi có nghĩa là phương pháp xử lý thu thập hành động. Danh sách .Foreach/Array.Foreach hoặc Ienumerable .Tất cả vv – Fakrudeen

Trả lời

13

Java 8 có thể có hỗ trợ lambda nguyên bản. Cho đến lúc đó, bạn có thể sử dụng kết hợp các lớp bên trong và thư viện ẩn danh như google-guava. Dưới đây là các thư viện khác mà bạn có thể nhìn vào

Hoặc cái nhìn tốt hơn ở Scala

+0

Tôi không hiểu một điều gì, biểu thức Lambda được Microsoft cấp bằng sáng chế. Cơ hội Java có thể sử dụng nó là gì? – hardywang

+1

Tôi đã cười khi đọc nội dung đó - sau đó tìm thấy: http://www.google.com/patents/US20070044083 ... C# không ở gần ngôn ngữ đầu tiên có biểu thức lambda. Bằng sáng chế phải là một trong những điều ngớ ngẩn "Tôi không muốn bị kiện vì làm điều này mà mọi người đã sử dụng" bằng sáng chế. – Dale

3

Vòng lặp foreach tương đương trong Java được cấu trúc như thế này

List<Foo> fooList = // some list containing foos 
for (Foo foo : fooList){ 
    // do stuff 
} 

Không có biểu thức lambda trong Java, tuy nhiên nếu bạn có thể chờ cho đến khi Java8 họ đang thêm đóng cửa. Gần nhất bạn có thể nhận được là anonymous inner classes.

+0

Cảm ơn - nhưng tôi không có nghĩa là tương đương với từ khóa foreach của C#. Tôi có nghĩa là SomeCollection.ForEach (đóng cửa). Phần sau của câu trả lời là hữu ích mặc dù, mặc dù a. các lớp bên trong là tiết. – Fakrudeen

3

Thư viện Google ổi chứa FunctionPredicate các lớp có thể được sử dụng để mô phỏng chức năng giống như lambda. Như kgrad đề cập ở trên, bạn có thể tạo các trường hợp ẩn danh của từng loại.

http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/base/Function.html
http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/base/Predicate.html

Mặc dù bạn có thể dễ dàng viết các lớp học như thế này cho mình, ổi chứa rất nhiều các phương pháp helper mà sử dụng các chức năng và các vị từ cho làm những việc như chuyển hoặc lọc tất cả các loại khác nhau của iterables: http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/collect/Iterables.html

Lưu ý: Tôi nhận thấy rằng Pangea đã đăng liên kết tới Google Guava ở trên, nhưng tôi đã bắt đầu viết bài đăng này và nghĩ rằng sẽ vẫn hữu ích khi cung cấp liên kết.

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