フィールド属性(java.util.Date)を使用してグループ化し、同じ月/年に属するグループ化された会議タイプオブジェクトのコンテナである別のオブジェクトに配置する必要がある特定のオブジェクト(ミーティング)のリストがあります。マップはオブジェクトの場合、キーではなくその値に基づいてソートする方法は?
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の特定の月/年の値でソートすることを楽しみにしています。私はおそらくMonthMeetingsオブジェクトで比較を実装しようとしていますが、質問に来たより:
これらのオブジェクトがキーではなく、値に基づいてマップをソートする方法は?
これに関するご提案はありますか?
txです。
compareToを呼び出してGregorianCalendarオブジェクトを比較して呼び出しを委譲しました!あなたが提案したようにTreeSetを使用しました!ありがとうございました。そしてそれは働いた! xD –