0

の ArrayList がありMyObjectsます。クラスにはMyObjects10 個を超えるプロパティがありますが、4 つのプロパティからのみ検索する必要があります。ユーザーはボタンを押して、 の値を選択できますproperty1。ユーザーがproperty1Value1、 、property1Value2およびを選択しproperty1Value4、ボタンを押して、 、、 property2Value7 などのproperty2値を選択するとします。これらは、filter1 と filter2 です。、 およびは、filter1 で除外されているため、ユーザーには表示されません。新しいフィルター画面に入る前に検索を行うようなものです。彼が戻ってきたときに選択した値を表示する必要があるため、各フィルターで選択したものをどこかに保存する必要があります。property2Value1property2Value5property2Value2property2Value3property2Value4

eBay で同様の実装が行われているので、写真があると理解しやすいと思います。

最初はフィルタなし: ユーザーは各プロパティのすべての値を選択できます: フィルターなし

ユーザーは type プロパティに「Tablet」を選択しました。- 検索が完了し、一部のプロパティ値が表示されなくなりました:

タブレット

2 番目のフィルター値が選択されます。

タブタイプ

(自動的に)検索を押すと、SQLで次のようにする必要があります。

SELECT * FROM MyObjects WHERE
( (property1  = property1Value1) || (property1  = property1Value2) || (property1  = property1Value4) )
AND
(  (property2 = property2Value1) ||  (property2 = property2Value5) )

私はメモリ内にオブジェクトを持っているので、sqlLite3 データベースを作成するのは良い考えではないと思います。iOS の実装では、非常に複雑なキャッシュ アルゴリズムを実行しました。分離されたフィルター値をキャッシュします。補助インデックス ホルダー (最小 20) がたくさんあります。これは、ここでは言及されていませんが、フィルターごとに追加の作業が必要であり、データが一度だけ保存されるためです。

そのアルゴリズムをAndroidに書き直すのは怖いです.iOSにあるものは、簡単なものでなければなりません.

編集:基本的に、Javaオブジェクト検索でそのSQL検索を書き直す必要があります。

Edit2 : Multimap での回答に基づいています。

キーがプロパティの値 ( ) で、値が my へのインデックスのリスト(1,2,3,4,5...100)でMultimapある場合、 は a よりも優れていません。HashMap<String, <ArrarList<Integer>>property2Value3ArrayList<MyObjects>

各フィルター、各フィルター値を構築する必要がHashMap<String, <ArrarList<Integer>>あり、iOS が正確にそこにいるよりも...おそらくいくつかの補助コレクションが少なくなります。

何か案が?

4

2 に答える 2