2013-07-12 10 views
5

コレクションを照会できるJavaライブラリーを探しています。私はjFilterJoSqlを見つけた。コレクション/オブジェクトを照会するJavaライブラリー

しかし、JoSqlは2010年以降非アクティブになっており、リリースは2つしかないようです。 jFilterはかなり新しいようで、昨年から新しいリリースはありませんでした。

検索結果の数が少ないので、どちらかの検索結果を表示すると、その検索結果が広く使われていないことがわかります。

これらのライブラリに関するご意見はありますか?

+0

'(http://commons.apache.org/proper/commons-collections/)私はこのライブラリに満足しています。また、 'Guava'(http://stackoverflow.com/a/14979043/1051783)は多くの便利なAPIを提供しています – gunar

+0

あなたはC#に存在するLINQのようなものを探しています。グアバは、あなたが何か関数型プログラミングをしたいときに良い賭けです。それはあなたのアプリケーションに依存しますが、通常、これらのテクニックはすべて自分でコレクションを繰り返すよりもかなり遅いです。 – ssindelar

答えて

4

私はあなたのコレクションをインスタンス化するとき、あなたは簡単にインデックスのセットを定義することができます私の会社でsuccessfuly(https://code.google.com/p/cqengine/

をCqEngineを使用しています。これは述語よりはるかに強力です。

また、コレクションの検索を実行すると、CqEngineはコレクション全体を反復処理せず、各レコードが述語と一致するかどうかを確認します。代わりに、それはマップのようなデータ構造で一致するレコードを直接見つけるでしょう。したがって、優れたパフォーマンスを発揮します。

+0

CqEngineは面白く見えますが、構文もjFilterより読みやすくなります。しかし、それは一年の最高の部分のためだけに活動しているようです。 2012年12月以降の活動はありません – dngfng

+0

CqEngineの欠点反射を使用していないことがわかりましたので、私は属性を定義するコンセプトが好きです。しかし、誰かが探しているかもしれないすべての単一のモデルのすべてのメンバーに対して、これらの属性をすべて実装する必要はありません。 – dngfng

+1

CQエンジンがアクティブです!最後のリリースは2012年12月でした。誰もそのバージョンに対してバグを報告していないからです。それは基本的に私の作者として機能します。人々がバグを報告すると、活動があります!実際には反射をサポートしています。[ReflectiveAttribute](http://cqengine.googlecode.com/svn/cqengine/javadoc/apidocs/com/googlecode/cqengine/attribute/ReflectiveAttribute.html)を参照してください。最近のディスカッショングループ(2013年7月)の注釈を使用してPOJOを自動索引付けし、属性を自動生成する機能についての議論がありましたので、すぐに新しいリリース(おそらく1.1)につながります。 – npgall

2

Commons Collections、より具体的にはCollectionUtils.filter(Collection, Filter)をご覧ください。

もう1つのオプションはGoogle Guavaで、Iterables.filter(Iterable<T>, Predicate<? super T>)です。

あなたの選択はあなたです。

+0

これらを指摘してくれてありがとう。しかし、我々はフレームワークの魔女に対処しているので、メモリテーブルのように、コレクションの全体がキャッシュされています(それだけです)。フィルターをハードにコーディングする必要はありません。 – dngfng

1

たぶん私は `はApache Commonsのコレクションを使用していますそれは手遅れだが、それは他の誰かのために役に立つかもしれません、あなたが使用することができ 、

それは構文を以下のサポート

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