2013-07-12 3 views
5

Koleksiyonları sorgulamama izin verecek Java Kütüphaneleri arıyorum. jFilter ve JoSql arasında tökezledim. Bununla birlikte, JoSql'in 2010 yılından beri aktif olmadığı ve sadece 2 sürümün olduğu görülüyor. jFilter, oldukça yeni görünüyor ve geçen yıldan beri yeni bir sürüm sergilemedi.Java Kütüphanesi Koleksiyon/Nesneleri sorgulamak için

Arama sonuçlarının az olması, bunlardan herhangi birine başvururken, yaygın olarak kullanılmadıklarını gösterir.

Bu kitaplıklar hakkında herhangi bir öneriniz var mı, yoksa daha aktif olanı biliyor musunuz?

+0

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

kullanabilirsiniz '(http://commons.apache.org/proper/commons-collections/) ve bu kütüphaneden memnunum. Ayrıca 'Guava' (http://stackoverflow.com/a/14979043/1051783) çok sayıda yararlı API sağlar – gunar

+0

LINQ gibi C# içinde var gibi bir şey için büyük olasılıkla bakıyorsunuz. Guava, işlevsel bir programlama yapmak istediğinizde iyi bir bahis. Bu sizin uygulamanıza bağlıdır, ancak genellikle tüm bu teknikler koleksiyonu kendiniz tekrarlamaktan çok daha yavaştır. – ssindelar

cevap

4

Ben başarıyla şirketimin (https://code.google.com/p/cqengine/)

Bir koleksiyonu örneğini, kolayca endeksler bir dizi tanımlayabilirsiniz içinde CqEngine kullandık. Bu, yüklemlerden çok daha güçlüdür. Ayrıca, koleksiyonunuzda bir arama yapacağınız zaman, CqEngine tüm koleksiyonda yineleme yapmayacak, ardından her kaydın yüklemeyle eşleşip eşleşmediğini kontrol edecektir. Bunun yerine, bir harita benzeri veri yapısında eşleşen kayıtları doğrudan bulacaktır. Bu nedenle mükemmel performansa sahip olacaksınız. aşağıdaki sözdizimini destekler nerede

+0

CqEngine en azından söylemek ilginç görünüyor, sözdizimi jFilter'den daha okunabilir görünüyor. Ancak, sadece bir yılın en iyi kısmı için aktif olduğu görülüyor. Aralık 2012'den bu yana faaliyet yok – dngfng

+0

A Göründüğüm gibi CqEngine, yansıma kullanmama, öznitelik tanımlama kavramını beğeniyorum. Bununla birlikte, her bir üye için aranan her bir modeldeki tüm bu özellikleri kullanması gerekmekten nefret ediyorum. – dngfng

+1

CQEngine aktif! Son sürüm sadece Aralık 2012'de yapıldı, çünkü hiç kimse bu versiyona karşı hata bildirmedi ve temelde yazar olarak benim için çalışıyor. İnsanlar hata bildirirse etkinlik olacak! Aslında yansıma için destek var, bkz. [ReflectiveAttribute] (http://cqengine.googlecode.com/svn/cqengine/javadoc/apidocs/com/googlecode/cqengine/attribute/ReflectiveAttribute.html).Kısa bir süre önce tartışma grubunda POJO'ları otomatik olarak indeksleme ve otomatik olarak oluşturmaya ilişkin özellikler hakkında tartışmalar yapıldı (Temmuz 2013). Bu nedenle bu, yakında yeni bir sürüm oluşturacaktır (muhtemelen 1.1). – npgall

2

Commons Collections ve daha ayrıntılı olarak CollectionUtils.filter(Collection, Filter)'a bakabilirsiniz.

Başka bir seçenek Iterables.filter(Iterable<T>, Predicate<? super T>) olan Google Guava olabilir.

Seçim sizin.

+0

Bunları işaretlediğiniz için teşekkürler. Ancak, bir çerçeve cadıyla uğraştığımız için, bellek tablolarında olduğu gibi, bir sürü koleksiyon önbelleğe sahiptir (bu sadece bu şekilde). Filtreleri kodlamaktan uzaklaşmak istiyorum. – dngfng

1

Muhtemelen çok geç ama başkası için yararlı olabilir, Sen `Apache commons koleksiyonları kullanıyorum,

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; 
    } 
}