# ArrayList nach Datum sortieren



## Camino (12. Nov 2008)

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...

```
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...

```
DateComparator comp = new DateComparator();
Collections.sort(termineListe, comp);
```


----------



## SlaterB (12. Nov 2008)

```
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)); 
      }
}
```


----------



## Camino (12. Nov 2008)

Danke, das scheint Eclipse zu mögen.  :wink: Meckert aber weiterhin bei:

```
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?


----------



## SlaterB (12. Nov 2008)

```
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;
    }

}
```


----------



## Camino (12. Nov 2008)

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


```
class Termin
{

    public GregorianCalendar getCalendar()
    {
        return null;
    }

}
```

Warum soll da null zurückgegeben werden, und nicht der Datumseintrag?


----------



## ARadauer (12. Nov 2008)

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


----------



## Camino (12. Nov 2008)

Ja, sorry. Hätte ich mir ja auch denken können... Ich schliesse den Thread mal ab. Danke nochmal für die Hilfe.


----------



## SlaterB (12. Nov 2008)

genauer: Eclipse war das mit Auto-Create der fehlenden Methode


----------

