ArrayList sortieren

oli1994

Mitglied
Liebe Java-Forum-User 🙂
Ich habe folgendes Problem:
Ich habe die Klasse: Baustelle, diese wird in der Klasse: Baulos als Listenobject verwendet
Ich soll 2 Sortiermethoden schreiben, die nach der Methode kosten() in Baustelle sortieren,
sowie eine Sortiermethode die dannach sortieren soll, wielange die Baustelle noch benötigt um
fertigt gestellt zu werden. Hierbei nutze ich den GreogorianCalender in Baustelle als "endeDatum"
---> Sortieren nach endeDatum - heute (GregorianCalender) // heute = Parameter der Sortiermethode und gibt an von welchen Datum ausgegangen werden soll!

Die erste Sortieraufgabe habe ich folgendermaßen gelöst:

Java:
import java.util.Comparator;

public class compareBaustelle implements Comparator<Baustelle>
{
	public int compare(Baustelle a, Baustelle b)
	{
		if(a.kosten() > b.kosten())
		{
			return 1;
		}
		if(a.kosten() < b.kosten())
		{
			return -1;
		}
		return 0;
	}
	
}

In Baulos:
Java:
public void listeKosten()
	{
		Comparator<Baustelle> comparator = new compareBaustelle();
		java.util.Collections.sort(bList, comparator);
	}

Das funktioniert auch ganz gut, doch bei der 2. SortierMethode funktioniert dieser Lösungsweg nicht:
Java:
import java.util.GregorianCalendar;

public class compareBau 
{
	public int compare(Baustelle a, Baustelle b, GregorianCalendar heute)
	{
		GregorianCalendar a1 = new GregorianCalendar(a.getEndeDatum().get(java.util.Calendar.YEAR) - heute.get(java.util.Calendar.YEAR),a.getEndeDatum().get(java.util.Calendar.MONTH)- heute.get(java.util.Calendar.MONTH), a.getEndeDatum().get(java.util.Calendar.DATE)- heute.get(java.util.Calendar.DATE));
		GregorianCalendar b1 = new GregorianCalendar(b.getEndeDatum().get(java.util.Calendar.YEAR) - heute.get(java.util.Calendar.YEAR),b.getEndeDatum().get(java.util.Calendar.MONTH)- heute.get(java.util.Calendar.MONTH), b.getEndeDatum().get(java.util.Calendar.DATE)- heute.get(java.util.Calendar.DATE));
		if(a1.after(b1) == true)
		{
			return 1;
		}
		if(a1.before(b1) == true)
		{
			return -1;
		}
		return 0;
	}
}
Wie man sieht wollte ich ein Attribut hinzufügen, welches ich in Baulos dann verwenden muss, dies geht jedoch nicht, da es nur 2 compare Methoden in comparator gibt und diese unterstützen meinen Parameter nicht.
In Baulos:
Java:
public void listeDauer(GregorianCalendar heute)
	{
		Comparator<Baustelle> comparator = new compareBau();
		java.util.Collections.sort(bList, comparator);
	}

Ich würde mich über einen Lösungsvorschlag freuen, da ich wirklich nicht mehr weiter weiß und Hilfe benötige.

MFG Oli 🙂
 
Also zunächst muss deine Klasse compareBau (Klassen schreibt man groß!) natürlich auch das Interface implementieren! Wie du schon richtig schreibst, bekommt compare zwei Objekte übergeben!
Wieso du da ein GregorianCalendar übergeben bekommen möchtest verstehe ich nicht. Du könntest das ja als Instanz/Klassen-Variable in der Klasse definieren, allerdings verstehe ich eh nicht so recht wozu du das überhaupt brauchst? GregorianCalendar bzw Calendar ist selbst Comparable, d.h. du könntest auch einfach die compareTo benutzen zwischen den beiden Enddaten
 
Also zunächst muss deine Klasse compareBau (Klassen schreibt man groß!) natürlich auch das Interface implementieren! Wie du schon richtig schreibst, bekommt compare zwei Objekte übergeben!
Wieso du da ein GregorianCalendar übergeben bekommen möchtest verstehe ich nicht. Du könntest das ja als Instanz/Klassen-Variable in der Klasse definieren, allerdings verstehe ich eh nicht so recht wozu du das überhaupt brauchst? GregorianCalendar bzw Calendar ist selbst Comparable, d.h. du könntest auch einfach die compareTo benutzen zwischen den beiden Enddaten

...Klasse gerade groß geschrieben, übersehen *gg*
...Interface implementieren, übersehen *gg*
Das Beispiel ist eine Schulaufgabe und die Methoden sind vorgegeben... (Hilfsmethoden/Klassen nicht)
D.h muss der im Parameter verwendete Calender zum sortieren benutzt werden und kann leider nicht in der Klasse definiert werden >.<
Meiner Meinung nach auch ziemlich unnötig und dumm, aber naja Lehrer eben 😛
Ich weiß das GregorianCalendar compare-able sind, doch ich muss wie oben erwähnt
das eingegebene GregorianCalender Datum (heute) von dem GregorianCalender endeDatum abziehen, um auf einen GregorianCalendar zu kommen den ich mit einem anderen vergleiche, welcher die gleiche Prozedur durchlaufen hat. siehe a1,b1.
Hierbei war meine Überlegung Calender aus dem Parameter von compare(GregorianCalendar a, GregorianCalendar b) zu erstellen und diese dann zu vergleichen --> Ich rechne ja Jahre - jahre monate - monate etc.

Hier nun meine Frage:
Funktioniert das überhaupt, wenn ein Monatsminuswert herauskommt würde sich das Year um 1 z.B kürzen oder ist das kompletter Schwachsinn.
Aus Bauchgefühl würde ich sagen meine Lösung könnte funktionieren, doch die Parametervariable
heute steht mir einfach im Weg.
Kenntst du/ihr eine andere Lösung für mein "kompliziertes Problem" 😀
Würde mich freuen

MFG OLI 🙂
 

Neue Themen


Zurück
Oben