2013-07-12 26 views
5

Tôi đang tìm Thư viện Java cho phép tôi truy vấn các bộ sưu tập. Tôi đã tình cờ gặp jFilter một số JoSql.Thư viện Java để truy vấn Bộ sưu tập/Đối tượng

Tuy nhiên có vẻ như JoSql đã không hoạt động kể từ năm 2010 và chỉ có 2 bản phát hành. jFilter có vẻ khá mới và chưa có bản phát hành mới nào kể từ năm ngoái.

Số lượng nhỏ kết quả tìm kiếm, khi googling một trong hai kết quả tìm kiếm, gợi ý với tôi rằng chúng không được sử dụng rộng rãi.

Bạn có nhận được bất kỳ đề xuất nào về các thư viện này hoặc biết hoạt động nhiều hơn một lần không?

+0

Tôi đang sử dụng 'Apache commons bộ sưu tập '(http://commons.apache.org/proper/commons-collections/) và tôi hài lòng với thư viện này. Ngoài ra 'Guava' (http://stackoverflow.com/a/14979043/1051783) cung cấp nhiều API hữu ích – gunar

+0

Bạn đang tìm kiếm nhiều khả năng nhất cho LINQ giống như tồn tại trong C#. Ổi là một cược tốt khi bạn muốn làm một cái gì đó chức năng lập trình như thế nào. Nó phụ thuộc vào ứng dụng của bạn nhưng thông thường tất cả các kỹ thuật này chậm hơn đáng kể so với việc lặp lại bộ sưu tập của bạn. – ssindelar

Trả lời

4

Tôi đã sử dụng CqEngine successfuly trong công ty của tôi (https://code.google.com/p/cqengine/)

Khi bạn khởi tạo một bộ sưu tập, bạn có thể dễ dàng xác định một tập hợp các chỉ số. Điều này mạnh hơn nhiều so với các biến vị ngữ.

Ngoài ra, khi bạn thực hiện tìm kiếm trên bộ sưu tập của mình, CqEngine sẽ không lặp lại toàn bộ bộ sưu tập, sau đó kiểm tra xem mỗi bản ghi có khớp với vị từ hay không. Thay vào đó, nó sẽ trực tiếp tìm thấy các bản ghi phù hợp trong một Bản đồ giống như cấu trúc dữ liệu. Do đó bạn sẽ có hiệu suất tuyệt vời.

+0

CqEngine có vẻ thú vị khi nói ít nhất, cú pháp cũng trông dễ đọc hơn jFilter. Tuy nhiên có vẻ như nó chỉ hoạt động cho phần tốt nhất của một năm. Không có hoạt động nào kể từ tháng 12 năm 2012 – dngfng

+0

Một nhược điểm đối với CqEngine vì tôi thấy nó không sử dụng sự phản chiếu, tôi thích khái niệm xác định các thuộc tính. Tuy nhiên tôi ghét phải thực hiện tất cả các thuộc tính đó cho từng thành viên trong mỗi mô hình duy nhất mà ai đó có thể muốn tìm kiếm. – dngfng

+1

CQEngine đang hoạt động! Bản phát hành cuối cùng là vào tháng 12 năm 2012 chỉ vì không ai báo cáo lỗi chống lại phiên bản đó, và về cơ bản nó hoạt động cho tôi với tư cách là tác giả. Nếu mọi người báo cáo lỗi, sẽ có hoạt động! Có sự hỗ trợ cho sự phản chiếu thực sự, xem [Phản phản phản hồi] (http://cqengine.googlecode.com/svn/cqengine/javadoc/apidocs/com/googlecode/cqengine/attribute/ReflectiveAttribute.html).Đã có cuộc thảo luận về các tính năng tự động lập chỉ mục POJO và tự động tạo thuộc tính qua chú thích trong nhóm thảo luận gần đây (tháng 7 năm 2013), vì vậy điều này sẽ sớm dẫn đến bản phát hành mới (có thể 1.1). – npgall

2

Bạn có thể xem Commons Collections và cụ thể hơn là CollectionUtils.filter(Collection, Filter).

Tùy chọn khác sẽ là Google Guava, trong đó có Iterables.filter(Iterable<T>, Predicate<? super T>).

Lựa chọn là của bạn.

+0

Cảm ơn bạn đã chỉ ra những điều này. Tuy nhiên kể từ khi chúng tôi đang đối phó với một phù thủy khuôn khổ có một bó toàn bộ các bộ sưu tập lưu trữ, như trong bảng bộ nhớ (đó chỉ là cách nó được). Tôi muốn thoát khỏi việc mã hóa các bộ lọc. – dngfng

1

Có lẽ nó đã quá muộn nhưng nó có thể hữu ích cho người khác, Bạn có thể sử dụng,

https://code.google.com/p/joquery/

nơi nó hỗ trợ cú pháp sau,

Collection<Dto> testList = new ArrayList<>(); 

Filter<Dto> query = CQ.<Dto>filter(testList) 
    .where() 
    .property("id").eq().value(1); 
Collection<Dto> filtered = query.list(); 

class Dto 
{ 
    private int id; 
    private String text; 

    public int getId() 
    { 
     return id; 
    } 

    public int getText() 
    { 
     return text; 
    } 
} 
Các vấn đề liên quan