2010-10-25 28 views
1

我有一組發生在某些日期的事件。每個事件都有一個日期字段。現在我想創建一個Map,其中每個日期(從事件的所有日期中獲取)我將分配該日期發生的事件列表。所以在僞代碼:在地圖中存儲包含日期的對象組

public Map<Date, List<Event>> function(List<Event> list){ 

    Date[]dates = new Date(list.len()); 

    for(Object o: list) 
     add o.date to dates 

    for(int i=0; i<dates.length; i++){ 
     create list of events with date=dates[i] (using some getDate()) 
     add to map(dates[i], list) 
    } 

} 

這是一個適當的思維方式?如果是:如何創建具有特定日期的事件列表,然後將其添加到地圖?我剛開始收藏。

編輯

所以我試圖用hisdrewness的解決方案。最後一個問題是如何檢索具有所需日期的事件。所以我在我的地圖上創建了一個迭代器,但接下來呢?在python中很容易,但是如何在Java中'用date = date'來獲取對象呢?

private String getItems(Date date){ 
    String ret = ""; 
    // DatesSortedMap is my previously built map and it works properly 
    Iterator i = this.DatesSortedMap.entrySet().iterator(); 

    while(i.hasNext()){ 
     //how I can get to the object while having iterator ? 
     if(object.date = date) 
      ret += object; 
    } 

    return ret; 
} 

回答

0

你大部分都在那裏。您可以遍歷事件,而不是遍歷日期,將每個事件添加到適當的「桶」中。

1

這是我會怎麼編寫這個方法:

public Map<Date, List<Event>> function(List<Event> list){ 
    Map<Date, List<Event>> sortedEvents = new HashMap<Date, List<Event>>(); 
    for(Event event : list) { 
     Date eventDate = event.getDate(); 
     if(!sortedEvent.containsKey(eventDate)) { 
      sortedEvent.put(eventDate, new ArrayList<Event>()); 
     } 
     sortedEvent.get(eventDate).add(event); 
    } 
} 

或僞代碼:

Loop through events 
    Get event date 
    If Map does not contain member for event date 
     Create new member for event date 
    End if 
    Add event for given event date 
End Loop 

的一個重要警告是比較日期作爲哈希鍵。應考慮時區,毫秒精度等事情。

編輯

用於遍歷返回值:

Map<Date, List<Event>> map = // call sort function 
for(Map.Entry<Date, List<Event>> entry : map.entrySet()) { 
    Date date = entry.getKey(); 
    List<Event> events = entry.getValue(); 
}