2011-12-28 8 views
1

リストからすべてのオブジェクトを取得し、作成日にグループ化されたMapに入れたいとします。つまり、マップはMap<String, List<MyObject>>のようになります。 MyObjectオブジェクトには、作成日を格納するフィールドがあります。イテレータが空になるまでループを繰り返す

私はこのようになりますループしながら、ネストされたことを考えてきました

public Map<String, List<Expense>> getExpensesSorted(SortType type){ 
    Map<String, List<Expense>> map = new HashMap<String, List<Expense>>(); 

    List<Expense> expenses = getAllExpenses(budgetId).getExpenses() 
      .getList(); 

    if (type.equals(SortType.DAY)) { 
     Iterator<Expense> expIter = expenses.iterator(); 

     while (expIter.hasNext()) { 
      List<Expense> list = new ArrayList<Expense>(); 
      Expense exp = (Expense) expIter.next(); 
      list.add(exp); 

      String day = exp.getDate().format("YYYY-MM-DD"); 
      expIter.remove(); 

      while (expIter.hasNext()) { 
       Expense exp2 = (Expense) expIter.next(); 
       if (exp2.getDate().format("YYYY-MM-DD").equals(day)) { 
        list.add(exp2); 
        expIter.remove(); 
       } 
      } 
      map.put(day, expenses); 
     } 

    } else if (type.equals(SortType.WEEK)) { 
     ... 
    } else if (type.equals(SortType.TYPE)) { 
     ... 
    } else if (type.equals(SortType.CATEGORY)) { 
     ... 
    } 
    return map; 
} 

しかし、これは間違っているが、それは最初の要素だけと同じ日を持っているすべてのものを取得しますので、私のマップ1つの要素のみを有することになる。私は真剣にこの問題を解決する方法がわからない

...任意の助けを事前に

感謝。

答えて

1

このようなことは、仕事をする必要があります。私はそれをコンパイルしませんでした。私の部分の間違いだった

while (iter.hasNext()) { 
    MyObject obj = (MyObject) iter.next(); 
    String day = obj.getDate().format("YYYY-MM-DD"); 

    if(!map.containsKey(day)) { 
     map.put(day, new ArrayList<MyObject>()); 
    } 
    List<MyObject> list = map.get(day); 
    list.add(obj); 
    map.put(day, list); 
} 
+0

、それは同じ 'Iterator' –

+0

は、私は古いものを削除せずに新しい値を追加することで、リストを更新し、指定されたキーのリストを取得する答え – suat

+0

まず編集ですキーに対応する前のリストを上書きします。それは大丈夫ですか? – suat

3
Map<Data, List<MyObject>> result = new HashMap<Data, List<MyObject>>; 
for (List<MyObject> list : myMap.values()) { 
    for (MyObject myObject : list) { 
     Date date = myObject.getDate(); 
     List<MyObject> newList = result.get(date); 
     if (newList == null) { 
      newList = new Arraylist<MyObject>; 
      result.put(date. newList); 
     } 
     newList.add(myObject); 
    } 
} 
関連する問題