ArrayList nach Datum sortieren

  • Themenstarter Themenstarter Camino
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
C

Camino

Gast
Hallo,

ich komme gerade irgendwie nicht weiter. Ich hab eine ArrayList<Termin>, in der Objekte der Klasse Termin drin sind. Die Klasse Termin hat bisher die Felder GregorianCalendar calendar, String titel und String text. Nun möchte ich die ArrayList nach dem Datum sortieren lassen, bevor ich sie in einer JTable anzeige.

Soweit ich gelesen habe, brauche ich einen Comparator dafür. Wie muss der denn genau aussehen, dass er zwei Termine (bzw. deren Felder GregorianCalendar) miteinander vergleicht?

Hab folgenden Code irgendwo rauskopiert und versucht anzupassen, aber scheint wohl falsch zu sein...
Code:
class DateComparator {

		public int compare(Termin t1, Termin t2) {
	        GregorianCalendar val1 = ((Termin)t1).getCalendar();
	        GregorianCalendar val2 = ((Termin)t2).getCalendar();
	        return (val1<val2 ? -1 : (val1==val2 ? 0 : 1));
		}

Die ArrayList termineListe soll dann so sortiert werden...
Code:
DateComparator comp = new DateComparator();
Collections.sort(termineListe, comp);
 
Code:
public class DateComparator implements Comparator<Termin> {
      public int compare(Termin t1, Termin t2) { 
           GregorianCalendar val1 = t1.getCalendar(); 
           GregorianCalendar val2 = t2.getCalendar(); 
           return (val1==val2 ? 0 : val1.compareTo(val2)); 
      }
}
 
Danke, das scheint Eclipse zu mögen. :wink: Meckert aber weiterhin bei:
Code:
Collections.sort(termineListe, comp);

Fehlermeldung:
The method sort(List<T>, Comparator<? super T>) in the type Collections is not applicable for the arguments (ArrayList<Termin>, DateComparator).

Muss das auch noch DateComparator<Termin> heissen, oder was ist da falsch?
 
Code:
public class Test
{

    public static void main(String[] args)
    {
        List<Termin> termineListe = null;
        DateComparator comp = new DateComparator();
        Collections.sort(termineListe, comp);
    }
}


class DateComparator
    implements Comparator<Termin>
{
    public int compare(Termin t1, Termin t2)
    {
        GregorianCalendar val1 = t1.getCalendar();
        GregorianCalendar val2 = t2.getCalendar();
        return (val1 == val2 ? 0 : val1.compareTo(val2));
    }
}


class Termin
{

    public GregorianCalendar getCalendar()
    {
        return null;
    }

}
 
OK, vielen Dank. Das funktioniert jetzt so prima. Ich hab nur noch eine Frage dazu.

Code:
class Termin
{

    public GregorianCalendar getCalendar()
    {
        return null;
    }

}

Warum soll da null zurückgegeben werden, und nicht der Datumseintrag?
 
sollst du nicht.
das hat er einfach nur so geschrieben, damit es bei ihm compiliert und er ja nicht weiß was deine klasse da wirklich macht
 
Ja, sorry. Hätte ich mir ja auch denken können... Ich schliesse den Thread mal ab. Danke nochmal für die Hilfe.
 
genauer: Eclipse war das mit Auto-Create der fehlenden Methode 😉
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben