我有一个特定对象(会议)的列表,我需要使用字段属性(java.util.Date)进行分组,并将它们放在另一个对象中,该对象是属于同一月/年的分组会议类型对象的容器。如何根据对象的值而不是键对映射进行排序?
因此,我想接收一个会议列表中读取从数据库,比按月它们分组/年,具体MonthMeetings对象的一些代码,为了这个,我有使用地图像代码:
public static Map<String, MonthMeetings> groupMeetingsByMonth(
List<Meeting> meetings) {
// this is by default sorted by keys I'd like to have it sorted by using
// comparator on MonthMeetings objects, sorted by map values instead of
// keys like SortedMap default impl.
SortedMap<String, MonthMeetings> listMeetingsGroupedByMonth = new TreeMap<String, MonthMeetings>();
String labelMonthYear = "";
// reference to put in map.
MonthMeetings monthMeetings = null;
for (Iterator iterator = meetings.iterator(); iterator.hasNext();) {
// grab a meeting from list
Meeting meeting = (Meeting) iterator.next();
// get meeting date
Date dMeeting = meeting.getScheduledDate();
GregorianCalendar gCalendar = new GregorianCalendar();
gCalendar.setTime(dMeeting);
// simple method that build label in format MM_yyyy to use as map
// key.
labelMonthYear = generatesLabelMonthYear(gCalendar);
// check if MonthMeetings for specific month/year already exists in
// Map
monthMeetings = (MonthMeetings) listMeetingsGroupedByMonth
.get(labelMonthYear);
if (monthMeetings == null) {
// if not create MonthMeetings and add first meeting to it
monthMeetings = new MonthMeetings();
monthMeetings.addMeeting(meeting);
listMeetingsGroupedByMonth.put(labelMonthYear, monthMeetings);
} else {
// if does exist just add another meeting to it
monthMeetings.addMeeting(meeting);
}
}
return listMeetingsGroupedByMonth;
}
我相信这段代码解决了问题的第一部分,将会议分组在特定的MonthMeetings对象上。现在我期待按MonthMeetings特定月份/年份值对此地图进行排序。我可能会尝试在MonthMeetings对象上实现可比较的功能,但问题来了:
如何根据对象的值而不是按键对映射进行排序?
对此有何建议?
tx提前。
已经实现了可比较的并将compareTo委托给GregorianCalendar对象!按照您的建议使用TreeSet!谢谢。它的工作!的xD – 2010-12-01 02:01:11