2011-12-08 10 views
2

私は、以下に示すように5つの異なる列を含むsqliteデータベースに1つのテーブルを持っています。同じカテゴリのオブジェクトのarraylistから要素を抽出するにはどうすればいいですか?

CATEGORY NOTE  DATE   PRICE  MODE 
travel  delhi 10/5/2011 800   cash 
food  daily 9/5/2011  500   cash 
travel  goa  12/5/2011 1000   cash 

データベースの値は、ユーザーが実行時に追加します。結局のところ、私はそれをコンテンツプロバイダを通して取得し、ArrayListに格納してlistviewに表示します。しかし、今私はカテゴリーごとにそれを表示したいと思っています。そのカテゴリーのすべてのタスク、次にカテゴリー&のようなタスクをこのように表示したいのです。 Itemはすべての列名をデータメンバとして&のセッターとゲッターのクラスとして含むクラスです。どんな助けもありがとう。

答えて

1

使用グアバのMultiMaps.index方法に従ってグループに検索結果をカテゴリ欄にGROUP BY句を使用することができます。これは、マルチマップ、すなわちキーをカテゴリとしたマップとアイテムのリストを値として作成します。

あなたは、このメソッドが何をやるそして、グァバを使用できない場合:

  • キーはアイテムのリストをカテゴリ
  • 反復処理し、各項目を配置Map<String, List<Item>>を作成しますマップ

はここに例を示します

Map<String, List<Item>> itemsByCategory = new LinkedHashMap<String, List<Item>>(); 
for (Item item : theListOfItems) { 
    String category = item.getCategory(); 
    List<Item> itemsOfCategory = itemsByCategory.get(category); 
    if (itemsOfCategory == null) { 
     itemsOfCategory = new ArrayList<Item>(); 
     itemsByCategory.put(category, itemsOfCategory); 
    } 
    itemsOfCategory.add(item); 
} 

for (Map.Entry<String, List<Item>> entry : itemsByCategory.entrySet()) { 
    System.out.println("Category " + entry.getKey() + ":"); 
    for (Item item : entry.getValue()) { 
     System.out.println(" Item : " + item); 
    } 
} 
+0

返信ありがとうございます。私の視点で最初のものよりも理解できる第2の方法のコードやチュートリアルの例を挙げることができますか? –

+0

例を追加しました。 –

+0

それは私が望む正確な解決策です。ありがとう、それは私のためにうまくいった............ !!! –

2

あなたは、カテゴリ

+0

お返事ありがとうございます。しかし、私のクエリはGroup By節を含んでいません。私はresolver.query(EXPENSE_URI、新しいString [] {EXPENSE_CATEGORY、EXPENSE_DATE、EXPENSE_PRICE}、null、null、EXPENSE_CATEGORY)を使用しています。データベースから値を取得します。 –

1

はMAPPを作成します。

class CategoryMapper 
{ 
String categoryName; 
ArrayList<User> usersForThisCategory; 
} 

ここで、データベースからデータを取り出し、それぞれのカテゴリマッパーに追加します。

カテゴリの数とそのカテゴリに属する​​アイテムを保持する別のArrayLisを持つことができます。

+0

返信いただきありがとうございます。ここでユーザーは何ですか、あなたは説明することができますか? –

関連する問題