0

GWTアプリケーションをCMSにデプロイしています。ここで、「データ」はCMSの「構造」から取得され、Javascript DBに処理されます(私はTaffyDBを使用しています)。

そのJSDBは、GWTマップに挿入されるように処理され、次のようになります。

Map<Long, Product> mp;

製品数はそれほど多くないので、ブラウザで処理できると思います。Productこのマップで特定の属性を検索できる可能性は何ですか?次に、MapまたはListのをProduct返します

4

3 に答える 3

2

最初の簡単なアプローチは、マップを繰り返し、Product一致するsを取得することです。それが遅すぎる場合は、探しているものを見つけるのがより簡単(より速く)である特殊なマップを作成できます。これらのマップがどのように見えるかは、「クエリ」によって異なります。

例えば

Map<String, Collection<Product>> colorMap; // maps colors to Products

また

Map<Integer, Collection<Product>> ratingMap; // maps user rating to Products

最初にそれらを作成する必要があります。したがって、マップ全体を1回だけ繰り返す必要があります。

于 2013-03-19T09:47:13.533 に答える
0

最初の方法は前に言ったように簡単です

List<Product> matchingPrds = new ArrayList<Product>();

foreach(Product pr : mp.Values())
{
    if(pr.getAttribute() == yourValue)
    {
        matchingPrds.add(pr);
    }
}

return pr;

ただし、マップを繰り返すことは悪い考えです。これを複数回実行したい場合は、新しいコレクションへの保存を1回繰り返すことができます。コレクションはポインターのみを保存し、オブジェクトインスタンスは基本的に同じであるため、これはメモリを大量に消費しません。

したがって、使用法に応じて、user714965ソリューションを使用できます

Map<String,Map<Int,List<Product>> attrValueProductsMap = new HashMap<String,Map<Int,List<Product>>();

Stringが属性、つまりwidthである場合、intは値が300であり、リストにはこのAttribute、Intのすべての積が含まれます。タイプは、実装によって異なる場合があります。

于 2013-03-19T12:32:21.283 に答える
0

このマップで特定の製品属性を検索できる可能性はありますか?

良いニュースは、これが可能だということです。悪いニュースは、線形時間検索が含まれることです。つまり、マップのすべての要素を調べる必要があります。

于 2013-03-19T09:46:03.383 に答える