Best Practice ArrayList sortieren

DnSbrt86

Mitglied
Hallo zusammen,

aus Übungszwecken bin ich gerade dabei eine Aufgaben- und Terminverwaltung zu implementieren.
Das Programm soll es ermöglichen, Aufgaben und Termine sowohl nach der Dauer(ShortestJobFirst) und nach der Priorität zu sortieren.
Ich dachte daran die AufgabenObjekte in eine ArrayList zu stecken und sie dann mit Compareable zu vergleichen. Dies funktioniert für ein Attribut auch gut allerdings habe ich keine Ahnung wie ich die Alternativsortierung gestalten soll.
Für Denkanstöße wäre ich sehr dankbar😀

Klasse Aufgabe:

Java:
public class Aufgabe extends Task implements Comparable<Aufgabe>  {
	
	private int priorität  = 5;
	private int erwarteteDauer;
	
	public Aufgabe(String titel, String beschreibung, Kategorie typ,
			int priorität, int erwarteteDauer) {
		super(titel, beschreibung, typ);
		this.priorität = priorität;
		this.erwarteteDauer = erwarteteDauer;
	}
	public int getPriorität() {
		return priorität;
	}

	public void setPriorität(int priorität) {
		this.priorität = priorität;
	}
	public int getErwarteteDauer() {
		return erwarteteDauer;
	}
	public void setErwarteteDauer(int erwarteteDauer) {
		this.erwarteteDauer = erwarteteDauer;
	}
	
	public int compareTo(Aufgabe aufgabe){
		return ((Integer)this.getPriorität()).compareTo((Integer)aufgabe.getPriorität());
	}
	
}

Klasse Aufgabenverwaltung

Java:
import java.util.ArrayList;
import java.util.Collections;

    public class TerminAufgabenVerwaltung {
	
	ArrayList<Aufgabe> meineAufgaben = new ArrayList<Aufgabe>();
	ArrayList<Termin> meineTermine = new ArrayList<Termin>();
	
	public void fuegeAufgabeHinzu (String titel, String beschreibung, Kategorie typ, int priorität, int erwarteteDauer){
		
		Aufgabe a = new Aufgabe(titel, beschreibung, typ, priorität, erwarteteDauer);
		meineAufgaben.add(a);
	}
	
	public void fuegeTerminHinzu (String titel, String beschreibung, Kategorie typ, String beginnzeitpunkt, String endzeitpunkt, String erwarteteDauer){
		
		Termin a = new Termin(titel,beschreibung,typ, beginnzeitpunkt, endzeitpunkt, erwarteteDauer);
		meineTermine.add(a);
	}
	
	public void aufgabenPriorität(){
		Collections.sort(meineAufgaben);
		Collections.reverse(meineAufgaben);
	}
	
}

Viele Güße,
Daniel Siebert
 
Auf diese Artikel bin ich auch schon aufmerksam geworden allerdings konnten diese mir nicht helfen.
Verstehe nicht wie ich verschiedene Ansätze implementiere, geht nur für eins der Attribute...:noe:
 
Vielen Dank für den Link jedoch bin ich der Meinung, dass meine Semantik eine andere ist. Ich möchte entweder nach dem einem oder nach dem anderen sortieren...
 
Ist doch möglich. Ganz unten gibt es die Beispiele:

Collections.sort( persons, PERSON_LASTNAME_COMPARATOR );
System.out.println( persons );

Collections.sort( persons, PERSON_FIRSTNAME_COMPARATOR );
System.out.println( persons );

Collections.sort( persons, new ComparatorChain<Person>(
PERSON_LASTNAME_COMPARATOR, PERSON_FIRSTNAME_COMPARATOR ) );
System.out.println( persons );
 
Du implementiers eine Subklasse von Comperator<ZuVergleichenderTyp>

in dessen compare()-Methode vergleichst du nun die priorität-attribute.
Diesen Comperator nennst du PRIORITY_COMP.

Dann machst du das selbe noch einmal, nr dass du diesmal die dauer-Attribute vergleichst.
Diesen Comperator nennst du DURATION_COMP.

Und nur zum Verständnis:

Java:
public int compare(Aufgabe a, Aufgabe b){
    return Math.signum(a.dauer - b.dauer);
}
 
Da der Danke-Button zeitweise verschwunden war, musst du wahrscheinlich erstmal deinen Browsercache löschen, um den zurückzubekommen. (Ohne Gewährleistung)
 

Zurück
Oben