2010-10-25 57 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(); 
}