我有一个特定对象(会议)的列表,我需要使用字段属性(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。答案 0 :(得分:1)
您没有对地图&lt;&gt;进行排序 - 您可以排序的是它的值的Collection视图,由values()
方法返回。所以你的方法是正确的:实现Comparable并对集合进行排序。
答案 1 :(得分:1)
创建TreeSet<MonthMeeting>
并添加所有值,如下所示:
TreeSet<MonthMeeting> sorted = new TreeSet<MonthMeeting>(new MyComparator());
sorted.addAll(monthMeetingMap.values());
现在它按值排序。 MyComparator
将类似于:
public class MyComparator implements Comparator<MonthMeeting>() {
...
}
答案 2 :(得分:0)
您可能需要查看apache commons集合中的SortedBidiMap。