Ich habe eine Liste von spezifischen Objekten (Besprechungen), die ich unter Verwendung eines Feldattributs (java.util.Date) gruppieren und in ein anderes Objekt einfügen muss, das ein Container für gruppierte Besprechungsobjekte ist, die zum selben Monat/Jahr gehören .Wie sortiere ich eine Karte anhand ihrer Werte, nicht der Schlüssel, wenn es sich um Objekte handelt?
So über einig Code Ich denke, das ein Treffen Liste geholt aus der Datenbank und als Gruppe sie von Monat/Jahr in bestimmten MonthMeetings Objekten, für diesen Ich habe einen Code mit einer Karte wie erhält:
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;
}
Dieser Codeabschnitt löst, glaube ich, den ersten Teil des Problems und gruppiert Meetings mit seinen spezifischen MonthMeetings-Objekten. Jetzt freue ich mich darauf, diese Map nach Monat/Jahr-Werten zu sortieren. Ich werde wahrscheinlich versuchen, vergleichbare auf MonthMeetings Objekte zu implementieren, aber dann kam die Frage:
Wie sortiert man eine Karte basierend auf ihren Werten, nicht Schlüssel, wenn diese Objekte sind?
Irgendwelche Vorschläge dazu?
Tx im Voraus.
Vergleichbar implementiert und den Aufruf von compareTo an GregorianCalendar-Objekte delegiert! Dann haben Sie ein TreeSet verwendet, wie Sie es vorgeschlagen haben! Danke. Und es hat funktioniert! xD –