如何通过键列表对Hashmap中的列表元素进行分组
问题描述:
我想用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;
}
}
答
你可以使用一个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
答
假设你是分组由项目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
谢谢zozelfelfo,它有一点帮助,但你可以请添加一个代码片段作更多的说明。 – mish 2014-12-07 11:34:08
检查我的编辑答案@mish – zozelfelfo 2014-12-07 20:10:17
非常感谢这真的帮了我 – mish 2014-12-08 10:15:42