Collections Liste anhand mehrere Kriterien sortieren

Diskutiere Liste anhand mehrere Kriterien sortieren im Allgemeine Java-Themen Bereich.
Curtis_MC

Curtis_MC

Hallo zusammen :)

ich würde gerne meine listeDerTermine nach Datum sortieren. Sollten jedoch mehrere KalenderEinträge auf das gleiche Datum fallen, so möchte ich diese nach titel sortiere. Könnt ihr mir dazu einen Hinweis geben?


Ich habe folgende Struktur:
Java:
public class KalendarEintrag{
   LocalDate datum;
   String titel;

    public int compareTo(CalendarEntry that) {
        if (this.date.isAfter(that.date)) {
           return -1;
         } else if (this.date.isBefore(that.date)) {
           return 1;
        }
       return 0;
   }
}


public class Verwaltung{
   List<KalendarEintrag> listeDerTermine = new ArrayList<>();

   public List<KalendarEintrag> sortiereListe(){
      Collections.sort(listeDerTermine);
     //hier möchte ich meine Liste sortieren 
      return listeDerTermine;
   }
}
 
J

JustNobody

Du hast die Lösung in Worten doch schon geben: Wenn die Termine gleich sind (Wo in Deinem Code ist das der Fall?) dann soll der Titel verglichen werden.

Du musst es also schlicht in Deiner Methode noch einbauen.
 
Curtis_MC

Curtis_MC

Dazu erweitere ich die compareTo()-Methode um folgendes:
Java:
public int compareTo(CalendarEntry that) {
      if (this.date.isAfter(that.date)) {
           return -1;
         } else if (this.date.isBefore(that.date)) {
           return 1;
        } else if (this.date.equals(that.date)) {
            //Vergleiche nach Namen...     
           }
       return 0;

}
Leider weis ich nicht, wie das geht und was ich dann in dem Rumpf der else if() zurückgeben muss.
 
X

Xyz1

Java:
	public static class KalendarEintrag implements Comparable<KalendarEintrag> {
		LocalDate datum;
		String titel;

		public KalendarEintrag(LocalDate datum, String titel) {
			super();
			this.datum = datum;
			this.titel = titel;
		}

		public int compareTo(KalendarEintrag that) {
			int c = datum.compareTo(that.datum);
			if (c == 0)
				return titel.compareTo(that.titel);
			return c;
		}

		@Override
		public String toString() {
			return String.format("KalendarEintrag [datum=%s, titel=%s]", datum, titel);
		}
	}

	// TEST
	public static void main(String[] args) {
		LocalDate ld = LocalDate.now();
		List<KalendarEintrag> listeDerTermine = new ArrayList<>();
		listeDerTermine.add(new KalendarEintrag(ld, "Hugo"));
		listeDerTermine.add(new KalendarEintrag(ld, "Egon"));
		listeDerTermine.add(new KalendarEintrag(ld, "Balder"));
		Collections.sort(listeDerTermine);
		listeDerTermine.forEach(System.out::println);
	}
Das static bei KalendarEintrag kannst Du weglassen und Du kannst noch einen null-Check einfügen (da im Konstruktor).
 
Curtis_MC

Curtis_MC

Vielen Dank für den Denkanstoß, Tobias-nrw! So funktioniert es einwandfrei :)
 
Curtis_MC

Curtis_MC

haha, da hast du natürlich vollkommen recht! Da muss mir wohl durch das hin und her zwischen deutsch und englisch ein kleiner Fehler unterlaufen sein. Trotzdem danke :)
 
Thema: 

Liste anhand mehrere Kriterien sortieren

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben