1

私はコレクション、地図のリストを持っています、地図はMap<String, String>です。このコレクションを、演算子ではなく、論理的な比較でクエリする必要があります。SQLのようなもの。

データベースのストアドプロシージャからリストを作成するので、サイズがわかりません。ただし、サイズは10,000レコードを超えてはいけないと思います。

これを投稿している間、私はApacheファンクターを見ていますが、それらがここで役立つかどうかはわかりません。

私が考えている他の方法は、これを実現するためにインメモリデータベースDerbyを使用することです。

Javaライブラリまたはこれを行う他の方法を教えてください。

リスト内のマップは次のようになります。

Map<String, String> m1 = new Map<String, String>();
m1.put("name","Mark");
m1.put("age","21");
m1.put("city","some city");

Map<String, String> m1 = new Map<String, String>();
m1.put("name","David");
m1.put("age","25");
m1.put("city","other city");

リストをクエリして、次のマップを取得する必要があります。

  1. name=Mark
  2. name=Mark and age > 30
  3. city not in "other city"
4

4 に答える 4

2

Googleコレクション/Gauvaを使用できます。これは、次のような述語を使用したコレクションフィルタリングを提供します。

Iterables.filter(Iterable、Predicate)

述語を使用したフィルタリングの例については、この回答を参照してください。

于 2012-05-29T19:36:13.030 に答える
2

CQEngine-コレクションクエリエンジンを見てください。

私は作者として偏見がありますが、これは反復とフィルタリングに依存するアプローチよりも優れたパフォーマンスとスケーリングを実現します。

これは、(IndexedCollection)の実装を提供しますjava.util.Set。これにより、オブジェクトの属性に対する(任意に複雑な)クエリに基づいてオブジェクトを取得できます。

于 2014-05-06T14:10:24.107 に答える
0

Quaereはコレクションをクエリできます。インメモリデータベースベースのソリューションを探す前に、確認する必要があります。

于 2012-05-29T18:52:14.017 に答える
0

インメモリデータ(Javaオブジェクト)のフィルタリングに役立つJFilterを見つけました。以下は、JFilterのWebサイトからの説明です。

JFilterは、Javaコレクション内のオブジェクトをフィルタリング(クエリ)、マップ(選択)、および削減(集約)するためのシンプルで高性能なオープンソースライブラリです。クエリは、Mongodbクエリのようにjson形式で提供されます。

マップでのJFilterの使用に関する投稿を書きました。これは、データを保存し、 JFilterを使用してクエリ/フィルタリングする一般的な方法として使用しています。

JFilterを使用してメモリ内データをクエリ/フィルタリングする投稿へのリンクは次のとおりです

于 2012-07-07T07:51:37.120 に答える