2014-12-07 64 views
0

我想用HashMap將事件列表分組爲日期,但我遇到了問題。我希望日期成爲關鍵,而事件將成爲價值。因此,每個匹配鍵的事件都將存儲在HashMap中的List中。到目前爲止,我有一個事件列表和列表日期.....我的代碼顯示在下面,在此先感謝。如何通過鍵列表對Hashmap中的列表元素進行分組

代碼

public class TestMap { 

public static void main(String[] args){ 
    TestMap test = new TestMap(); 

    List<Date> mDays = new ArrayList<Date>(); 
    SimpleDateFormat mFormat = new SimpleDateFormat("EEEE d MMMM yyyy"); 
    GregorianCalendar mCalendar = (GregorianCalendar)GregorianCalendar.getInstance(); 
    mCalendar.setTime(new Date()); 
    for (int i = 0; i < 7; i++){ 
      mDays.add(mCalendar.getTime()); 
      mCalendar.add(Calendar.DAY_OF_WEEK, 1); 
      System.out.println("Date: " + mFormat.format(mDays.get(i))); 

     } 


    List<Events> mEvents = new ArrayList<Events>(); 
    mEvents.add(new Events("1", "boat party", "Sunday 7 December 2014")); 
    mEvents.add(new Events("2", "church meeting", "Monday 8 December 2014")); 
    mEvents.add(new Events("3", "shopping", "Saturday 13 December 2014")); 
    mEvents.add(new Events("4", "clubbing", "Friday 12 December 2014")); 
    mEvents.add(new Events("5", "visiting", "Thursday 11 December 2014")); 
    mEvents.add(new Events("6", "tour", "Wednesday 10 December 2014")); 
    mEvents.add(new Events("7", "work", "Tuesday 9 December 2014")); 
    mEvents.add(new Events("1", "beckie birthday", "Sunday 7 December 2014")); 
    mEvents.add(new Events("2", "camping", "Monday 8 December 2014")); 
    mEvents.add(new Events("3", "gym", "Saturday 13 December 2014")); 
    mEvents.add(new Events("4", "working", "Friday 12 December 2014")); 
    mEvents.add(new Events("5", "farming", "Thursday 11 December 2014")); 
    mEvents.add(new Events("6", "attend sales", "Wednesday 10 December 2014")); 
    mEvents.add(new Events("7", "work", "Tuesday 9 December 2014")); 

    for(Events evt: mEvents){ 

     System.out.println("ID: " +evt.getEventId()+ " Title: "+evt.getEventTitle()+ " Date:  
    "+evt.getStartDate()); 
    } 
} 

}

活動類:

class Events{ 

private String eventId; 
private String eventTitle; 
private String startDate; 

public Events(String eventId, String eventTitle, String startDate) { 
    super(); 
    this.eventId = eventId; 
    this.eventTitle = eventTitle; 
    this.startDate = startDate; 
} 
public String getEventId() { 
    return eventId; 
} 
public void setEventId(String eventId) { 
    this.eventId = eventId; 
} 
public String getEventTitle() { 
    return eventTitle; 
} 
public void setEventTitle(String eventTitle) { 
    this.eventTitle = eventTitle; 
} 
public String getStartDate() { 
    return startDate; 
} 
public void setStartDate(String startDate) { 
    this.startDate = startDate; 
} 

} 

回答

1

你可以使用一個HashMap<Date,List<Events>>實現這一目標。

你得到你的日期,併爲每個日期對象,你會得到一個List<Events>對象。得到這個對象後(或者如果它不存在則爲NULL),你將能夠添加/移除事件,然後使用put方法再次存儲它們。

希望它可以幫助

編輯

你有這樣的事情在你的類中聲明:

HashMap<Date,List<Events>> my_events = new HashMap<Date,List<Events>>(); 

讓我們把一些例子。

1 - 將事件在一定日期:

//suppose that you already have a date in which you want to add the new event 

if(my_events.contains(given_date)) 
{ 
    List<Events> aux = my_events.get(given_date); 
    aux.add(new_event); 
    my_events.put(given_date,aux); 
} 
else 
{ 
    List<Events> new_list = new ArrayList<Event>(); 
    new_list.add(new_event); 
    my_events.put(given_date,new_list); 

} 

2 - 你想在某一特定日期的所有事件:

return my_events.get(given_date); // this will return null if the given date (key) does not exists 
+0

謝謝zozelfelfo,它有一點幫助,但你可以請添加一個代碼片段作更多的說明。 – mish 2014-12-07 11:34:08

+0

檢查我的編輯答案@mish – zozelfelfo 2014-12-07 20:10:17

+0

非常感謝這真的幫了我 – mish 2014-12-08 10:15:42

0

假設你是分組由項目ID字段,

// create a map which relates String-List of Event mapping 
HashMap<String, List<Event>> listMap=new HashMap<String,List<Event>>(); 

// loop through the events 
for(Events evt: mEvents){ 
    if(!listMap.containsKey(evt.getID())){ 
     listMap.put(evt.getID(), new ArrayList<Event>()); 
    } 
    listMap.get(evt.getID()).add(evt); 
} 

// if you want to get a list of all events with the same ID, 
Collection<Event> eventWithSpecificId=listMap.get("certain ID"); 
+0

請添加一些解釋。 – Silicomancer 2014-12-07 13:17:35

相關問題