我正在尋找允許我查詢集合的Java庫。我偶然發現了jFilter和JoSql。用於查詢集合/對象的Java庫
但是,似乎JoSql自2010年以來一直處於非活動狀態,並且只有2個版本。 jFilter似乎是相當新的,自去年以來還沒有任何新的發佈。
搜索結果的少量,當使用其中任何一個搜索結果時,都暗示它們沒有被廣泛使用。
你對這些庫有什麼建議嗎,或者知道更活躍一次?
我正在尋找允許我查詢集合的Java庫。我偶然發現了jFilter和JoSql。用於查詢集合/對象的Java庫
但是,似乎JoSql自2010年以來一直處於非活動狀態,並且只有2個版本。 jFilter似乎是相當新的,自去年以來還沒有任何新的發佈。
搜索結果的少量,當使用其中任何一個搜索結果時,都暗示它們沒有被廣泛使用。
你對這些庫有什麼建議嗎,或者知道更活躍一次?
我用CqEngine successfuly在我公司(https://code.google.com/p/cqengine/)
當你實例化一個集合,你可以很容易地定義一組指標。這比謂詞更強大。另外,當您將對您的集合執行搜索時,CqEngine將不會遍歷整個集合,然後檢查每條記錄是否與謂詞相匹配。相反,它會直接在Map之類的數據結構中找到匹配的記錄。因此你會有很好的表現。
CqEngine看起來很有趣,至少可以說,這個語法看起來比jFilter更可讀。然而,它似乎只在一年中最好的部分活躍起來。自2012年12月以來沒有任何活動 – dngfng
因爲我認爲CqEngine沒有使用反射,所以我喜歡定義屬性的概念。然而,我不願意爲每個人都可能想要搜索的模型中的每個成員實現所有這些屬性。 – dngfng
CQEngine活躍!最後一個版本是在2012年12月發佈的,因爲沒有人報告過該版本的bug,它基本上可以作爲作者。如果人們報告錯誤,就會有活動!實際上有對反射的支持,參見[ReflectiveAttribute](http://cqengine.googlecode.com/svn/cqengine/javadoc/apidocs/com/googlecode/cqengine/attribute/ReflectiveAttribute.html)。最近(2013年7月)討論組討論了關於自動索引POJO和自動生成屬性的功能的討論,因此這將很快導致新的發佈(可能爲1.1)。 – npgall
你可以看看Commons Collections,更具體地說CollectionUtils.filter(Collection, Filter)
。
另一種選擇是Google Guava,其具有Iterables.filter(Iterable<T>, Predicate<? super T>)
。
選擇是你的。
感謝您指出這些。然而,由於我們正在處理一個框架女巫有一大堆集合緩存,如內存表(這是它的方式)。我想擺脫硬編碼過濾器。 – dngfng
也許爲時已晚,但它可能對別人有幫助, 您可以使用,
https://code.google.com/p/joquery/
它支持下面的語法,
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;
}
}
我使用'阿帕奇百科全書集合'(http://commons.apache.org/proper/commons-collections/),我對這個庫很滿意。另外'Guava'(http://stackoverflow.com/a/14979043/1051783)提供了很多有用的API – gunar
您正在尋找像C#中存在的那樣的LINQ。當你想做一些類似功能的編程時,番石榴是一個很好的選擇。這取決於你的應用程序,但通常所有這些技術比你自己迭代集合要慢得多。 – ssindelar