2009-04-24 27 views
8

Cụ thể, tôi đang tìm ký hiệu sạch tương tự như Collection<T>.TrueForAll/Exists vvCó tương đương Java 1.5 với phương thức Predicate <T> trong .Net không?

Nó cảm thấy có mùi phải viết một vòng lặp foreach để kiểm tra sự trở lại của một phương pháp trên từng đối tượng, vì vậy tôi hy vọng có một thành ngữ Java tốt hơn cho nó.

+0

Lưu ý:.. có * là * mà trong Java 1.8, nhưng không phải trong Java 1.5 – Daniel

Trả lời

3

Theo như tôi biết, không. Nhưng Apache Commons Collections có một cái gì đó như thế này: Predicate


Sửa: Đúng vậy, như đã nêu trong các ý kiến, Commons Bộ sưu tập là từ trước Generics thế giới, vì vậy Google Collections (cập nhật: Guava) có vẻ giống như một tùy chọn rõ ràng hơn ngay bây giờ. Tuy nhiên, Bộ sưu tập của Commons xứng đáng được đề cập vì đó là một thư viện nổi tiếng thực hiện việc này và cũng để mọi người biết lý do tại sao không sử dụng nó. :)

Tôi chỉ đọc thêm về Google Bộ sưu tập trong nice interview này với các nhà phát triển chính của nó, và muốn trích dẫn một chút mà những giao dịch đặc biệt với "Google Collections vs Apache Commons Bộ sưu tập" phát hành:

Điều gì là duy nhất về cách tiếp cận của bạn? Làm thế nào để nó khác với, ví dụ: Bộ sưu tập của Apache Commons?

Kevin:. "Vâng, cảm ơn Chúa vì Apache Commons Chúng tôi muốn tất cả có trong hình dạng xấu mà không cần thư viện như thế này Đó nói, thật đáng buồn rằng dự án đặc biệt đã bị đình trệ, trong một thế giới trước generics. Họ muốn sử dụng Generics, nhưng họ nhận ra rằng điều này sẽ liên quan đến một không đáng kể và không tương thích viết lại. 5 toàn công ty kể từ mùa xuân năm 2005. Thư viện bộ sưu tập là không được hợp nhất là một bộ chia đối với chúng tôi, bởi vì chúng tôi thực sự ghét nhận được cảnh báo trình biên dịch . Tôi cũng đã quan tâm đến nhiều nơi trong mà các bộ sưu tập Apache không phù hợp với các thông số kỹ thuật của giao diện JDK họ thực hiện "

[...]

Jared:". Như Kevin ngụ ý, thư viện của chúng tôi là thư viện bộ sưu tập duy nhất mà tôi biết , bên ngoài JDK, được xây dựng với Java 5 các tính năng: generics, enums, covariant loại trả lại, v.v. Khi viết mã Java 5 , bạn muốn có thư viện sưu tập tận dụng tối đa ngôn ngữ. Ngoài ra, chúng tôi đã nỗ lực rất lớn để làm cho thư viện hoàn chỉnh, mạnh mẽ và phù hợp với các lớp thu thập JDK.Các lớp học bộ sưu tập của chúng tôi đã được nhiều hơn giới hạn ban đầu, nhưng chúng tôi đã dần dần cải thiện chúng trong hai năm qua. Vì tất cả thư viện sử dụng trong hệ thống kiểm soát nguồn của Google, chúng tôi đã có sự linh hoạt để sửa đổi giao diện công khai . Một dự án mã nguồn mở như Bộ sưu tập của Apache Commons không có quyền tự do thay đổi hành vi sau khi phát hành ban đầu. Vì chúng ta sẽ mất tính linh hoạt mà một lần Google Bộ sưu tập Thư viện 1.0 là phát hành, chúng tôi mong muốn nhận được phản hồi ngay bây giờ để chúng ta có thể có được những điều đúng."

+4

Bộ sưu tập Commons s thiếu hỗ trợ chung. – erickson

5

Functional Java cung cấp chức năng hạng nhất. Một ngữ được thể hiện như F<T, Boolean> Ví dụ, đây là một chương trình mà kiểm tra một mảng cho sự tồn tại của một chuỗi đó là tất cả chữ thường

import fj.F; 
import fj.data.Array; 
import static fj.data.Array.array; 
import static fj.function.Strings.matches; 

public final class List_exists { 
    public static void main(final String[] args) { 
    final Array<String> a = array("Hello", "There", "how", "ARE", "yOU?"); 
    final boolean b = a.exists(matches.f("^[a-z]*$")); 
    System.out.println(b); // true 
    } 
} 
Các vấn đề liên quan