ArrayList (mit Objekten) sortieren

ChristianEG

Mitglied
Aloha,

ich habe hier ein ArrayList was mit mehreren Objekten des Typs "Buchung" gefülllt ist. Eine Buchung besteht aus Kontonummer, Datum und Betrag.

Kontonummer ist ein String,
Datum ist vom Typ Calendar (DATE,MONTH,YEAR) und
Betrag ist ebenfalls ein String.

Ich möchte nun meine ArrayListe nach Datum sortieren, dazu habe ich mir schon folgenden Thread (und unzählige via Google) http://www.java-forum.org/allgemeine-java-themen/74377-arraylist-datum-sortieren.html angeschaut. Allerdings klappt das so nicht wirklich bei mir. Aktuell haben jetzt bei mir alle Buchungen das gleiche Datum :(

Kann mir jemand helfen die compareTo Methode richtig zu setzen, damit mein ArrayList nach Datum sortiert wird?

Liebe Grüße,
Christian
 

eRaaaa

Top Contributor
Calendar hat doch selbst auch eine compareTo..d.h. du müsstest einfach nur so etwas schreiben wie:

[c]return buchung.getDate().compareTo(buchung2.getDate());[/c]
 

ChristianEG

Mitglied
Hey, vielen dank für den Tipp.

Wie baue ich das korrekt ein?

Habe das mal so versucht:
Java:
    public int compareTo(Buchung b1, Buchung b2) {
	return b1.getDatum().compareTo(b2.getDatum());
    }

läuft aber nicht.. :\
 

eRaaaa

Top Contributor
Hat deine Klasse Buchung denn die Methode getDatum() ? :D
Also genau kann man da ja jetzt nichts sagen ohne die Klasse "Buchung" zu kennen...
Und wieso ist der Betrag eig. ein String? :D
 

ChristianEG

Mitglied
Hier die Klasse im Überblick:

Java:
    private String Buch_Kontonummer;
    private Calendar Buch_Datum;
    private String Buch_Betrag;

    Buchung(String KontoNR, Calendar Buch_date, String Buch_betrag) {
	Buch_Kontonummer = KontoNR;
	Buch_Datum = Buch_date;
	Buch_Betrag = Buch_betrag;
    }

    public String getKontonummer() {
	return Buch_Kontonummer;
    }

    public void setKontonummer(String buch_kontonummer) {
	Buch_Kontonummer = buch_kontonummer;
    }

    public Calendar getDatum() {
	return Buch_Datum;
    }

    public void setDatum(Calendar buch_datum) {
	Buch_Datum = buch_datum;
    }

    public String getBetrag() {
	return Buch_Betrag;
    }

    public void setBetrag(String buch_betrag) {
	Buch_Betrag = buch_betrag;
    }

Das der Betrag n String ist.. naja, nicht schön... ich weiß. Da ich allerdings am Anfang eine CSV Datei auslese und anhand des ; Splitte und diese "gesplitteten"-Werte in ein String[] schreibe, habe ich dort bei dem Betrag ein String. Der Betrag ist in der CSV im Format xxx,xx. Danach wandel ich den Betrag in ein Double um und ersetze das , mit einem . um mit den Werten zu rechnen.

Funktioniert also, allerdings klappt das jetzt mit dem Datum nicht, ich kämpfe schon seit Tagen mit dem compareTo Zeugs, hab ewig gecodet damit mein TreeSet keine doppelten Kontonummern annimmt..^^


Achja wenn ich die compareTo methode in der Klasse Buchung einfüge, meckert er rum und will unbedingt folgendes am Ende der Klasse einfügen:

Java:
    @Override
    public int compareTo(Buchung o) {
	// TODO Auto-generated method stub
	return 0;
    }
 

eRaaaa

Top Contributor
Achja wenn ich die compareTo methode in der Klasse Buchung einfüge, meckert er rum und will unbedingt folgendes am Ende der Klasse einfügen:

Java:
    @Override
    public int compareTo(Buchung o) {
	// TODO Auto-generated method stub
	return 0;
    }
?!?! Wie jetzt? Ja klar, es gibt zwei Wege..entweder du ersterllst eine eigene Klasse die Comparator<Buchung> und somit compare implementiert..oder deine Klasse Buchung implementiert halt "implements Comparable<Buchung" und dann musst du in deine Klasse Buchung eben die compareTo einfügen..wieso? Wo befindet sich denn die compareTo momentan bei dir? Die muss natürlich dann in deine Buchungsklasse !
/edit ach..bei compareTo hast du natürlich nur ein Argument..du musst dann natürlich mit THIS vergleichen...
Java:
    @Override
    public int compareTo(Buchung o) {
	return o.getDatum().compareTo(this.getDatum()); //absteigend
    }
 
Zuletzt bearbeitet:

ChristianEG

Mitglied
Ja ich glaube ich hab mich falsch ausgedrückt :D

Das ist mir bewusst das es die 2- Wege gibt. Ich würde das gerne in meine Klasse Buchung schreiben. Natürlich habe ich im ClassHeader "implements Comparable<Buchung>". Wenn ich jetzt folgenden Code meiner Klasse hinzufüge:

Java:
    public int compareTo(Buchung b1, Buchung b2) {
	return b1.getDatum().compareTo(b2.getDatum());
    }[/Java]

dann  bekomme ich eine Fehlermeldung von Eclipse angezeigt:

[code=Java]The type Buchung must implement the inherited abstract method Comparable<Buchung>.compareTo(Buchung)

Als Lösung schlägt Ecplipse vor, folgendes ZUSÄTZLICH in die Klasse zu schreiben:

Java:
    @Override
    public int compareTo(Buchung o) {
	// TODO Auto-generated method stub
	return 0;
    }

Allerdings verstehe ich nicht warum!! Sorry wenn ich mich nicht klar ausdrücke momentan, nach 9 Stunden Programmieren bin ich etwas durchn Wind :D Hoffe kannst damit was anfangen!



***EDIT

Mit deinem neuen Code für compareTO bekomme ich keine Meldung. Allerdings ist das Datum bei jedem Objekt immernoch gleich.

Java:
Datum: 13.7.2009 Konto 1001 Betrag: 702,78
Datum: 13.7.2009 Konto 1005 Betrag: -16,27
Datum: 13.7.2009 Konto 1004 Betrag: -586,08
Datum: 13.7.2009 Konto 1010 Betrag: -122,77
Datum: 13.7.2009 Konto 1002 Betrag: 512,54
Datum: 13.7.2009 Konto 1006 Betrag: 402,14
Datum: 13.7.2009 Konto 1005 Betrag: -260,17

Als vergleich die originalen Werte:

Java:
1001;15.01.2009;702,78
1005;20.02.2009;-16,27
1004;30.06.2009;-586,08
1010;16.01.2009;-122,77
1002;21.02.2009;512,54
1006;01.07.2009;402,14
1005;17.01.2009;-260,17
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Jajaja, siehe mein edit :D

[c]public int compareTo(Buchung o) {[/c] = Comparable
[c]public int compare(Buchung o1, Buchung o2) {[/c]= externer Comparator
 

eRaaaa

Top Contributor
Mit deinem neuen Code für compareTO bekomme ich keine Meldung. Allerdings ist das Datum bei jedem Objekt immernoch gleich.

Java:
Datum: 13.7.2009 Konto 1001 Betrag: 702,78
Datum: 13.7.2009 Konto 1005 Betrag: -16,27
Datum: 13.7.2009 Konto 1004 Betrag: -586,08
Datum: 13.7.2009 Konto 1010 Betrag: -122,77
Datum: 13.7.2009 Konto 1002 Betrag: 512,54
Datum: 13.7.2009 Konto 1006 Betrag: 402,14
Datum: 13.7.2009 Konto 1005 Betrag: -260,17

Ja, das liegt doch aber nicht an der compareTo oder? Liegt doch wahrscheinlich eher daran, dass die Objekte halt mit diesen Daten erzeugt werden?

Java:
class Buchung implements Comparable<Buchung> {
    private String Buch_Kontonummer;
    private Calendar Buch_Datum;
    private String Buch_Betrag;

    Buchung(String KontoNR, Calendar Buch_date, String Buch_betrag) {
	Buch_Kontonummer = KontoNR;
	Buch_Datum = Buch_date;
	Buch_Betrag = Buch_betrag;
    }

    public String getKontonummer() {
	return Buch_Kontonummer;
    }

    public void setKontonummer(String buch_kontonummer) {
	Buch_Kontonummer = buch_kontonummer;
    }

    public Calendar getDatum() {
	return Buch_Datum;
    }

    public void setDatum(Calendar buch_datum) {
	Buch_Datum = buch_datum;
    }

    public String getBetrag() {
	return Buch_Betrag;
    }

    public void setBetrag(String buch_betrag) {
	Buch_Betrag = buch_betrag;
    }

    @Override
    public String toString() {
	return "Buchung [Buch_Betrag=" + Buch_Betrag + ", Buch_Datum="
		+ Buch_Datum.getTime() + ", Buch_Kontonummer="
		+ Buch_Kontonummer + "]";
    }

    @Override
    public int compareTo(Buchung o) {
	return o.getDatum().compareTo(this.getDatum()); // absteigend
    }
    
    public static void main(String[] args) {
	List<Buchung> list = new ArrayList<Buchung>();
	Calendar cal1 = Calendar.getInstance();
	cal1.set(2009, 6, 3);
	Calendar cal2 = Calendar.getInstance();
	cal2.set(2002, 6, 3);
	Calendar cal3 = Calendar.getInstance();
	cal3.set(2011, 6, 3);
	list.add(new Buchung("1234", Calendar.getInstance(), "20.0"));
	list.add(new Buchung("567", cal1, "444"));
	list.add(new Buchung("890", cal2, "11"));
	list.add(new Buchung("1123", cal3, "777"));
	Collections.sort(list);
	for (Buchung buchung : list) {
	    System.out.println(buchung);
	}
    }
}

funktioniert bei mir...
 

ChristianEG

Mitglied
Dann werd ich einen Fehler in meiner Ausgabe haben..

wenn ich das so wie du ausgebe:

Java:
    for (Buchung buchung : list) {
        System.out.println(buchung);
    }

kommt nur quark raus.


Java:
...
drei.Buchung@89ae9e
drei.Buchung@1270b73
drei.Buchung@60aeb0
drei.Buchung@16caf43
drei.Buchung@66848c
drei.Buchung@8813f2
...
 

eRaaaa

Top Contributor
weil bei dir
Java:
    @Override
    public String toString() {
    }

fehlt(siehe bei mir) ...ohje, jetzt schweifen wir glaub ich grob vom eigentlichen Thema ab :D
 

ChristianEG

Mitglied
Oki. Ausgabe läuft. Aber bei mir unsortiert :(

Java:
Buchung [Buch_Betrag=702,78, Buch_Datum=Thu Aug 13 20:06:45 CEST 2009, Buch_Kontonummer=1001]
Buchung [Buch_Betrag=-16,27, Buch_Datum=Thu Aug 13 20:06:45 CEST 2009, Buch_Kontonummer=1005]
Buchung [Buch_Betrag=-586,08, Buch_Datum=Thu Aug 13 20:06:45 CEST 2009, Buch_Kontonummer=1004]
Buchung [Buch_Betrag=-122,77, Buch_Datum=Thu Aug 13 20:06:45 CEST 2009, Buch_Kontonummer=1010]
 

eRaaaa

Top Contributor
naja unsortiert würde ich nicht sagen, sie sind ja alle gleich :D
Wie erstellst du denn deine Buchungs-Objekte und vor allem die Calendar-Instanzen?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Von ArrayList abgeleitete Klasse nur mit bestimmten Objekten füllen Allgemeine Java-Themen 1
J ArrayList aus Point-Objekten nach dem x-Wert ordnen Allgemeine Java-Themen 2
T casten von Objekten aus einer ArrayList Allgemeine Java-Themen 4
M ArrayList oder LinkedList Allgemeine Java-Themen 10
C Sortieren und Selektieren einer ArrayList<Point3D> Allgemeine Java-Themen 6
A Einzelne Objekte und Unterobjekte einer ArrayList ausgeben Allgemeine Java-Themen 53
T Remove bei ArrayList funktioniert nicht Allgemeine Java-Themen 2
B Type mismatch: cannot convert from Graph.Edge to ArrayList<Graph.Edge> Allgemeine Java-Themen 21
R ArrayList Allgemeine Java-Themen 4
G jToggleButton in Array/ArrayList Allgemeine Java-Themen 12
J ArrayList, ganze Zeilen löschen oder überspringen Allgemeine Java-Themen 4
L ArrayList sortieren Allgemeine Java-Themen 2
C ArrayList Problem Allgemeine Java-Themen 3
O Datentypen Wie kann ich den Typ einer ArrayList abfragen ? Allgemeine Java-Themen 7
S Best Practices CopyConstrutor mit ArrayList Allgemeine Java-Themen 1
S ArrayList Design Allgemeine Java-Themen 4
S Array dynamisieren oder ArrayList verwenden? Allgemeine Java-Themen 17
L ArrayList mit String Arrays in ein Array umwandeln Allgemeine Java-Themen 1
H Elemente aus ArrayList in Array speichern Allgemeine Java-Themen 8
MiMa Person in einer Arraylist hinzugügen mit Prüfung ? Allgemeine Java-Themen 6
X Adjazenzliste ohne ArrayList Allgemeine Java-Themen 6
X Output von ArrayList Allgemeine Java-Themen 3
H Stream in ArrayList umwandeln Allgemeine Java-Themen 2
H Mehrere Datentypen in einer Arraylist speichern Allgemeine Java-Themen 9
H Arraylist mit anderer ArrayList überschreiben Allgemeine Java-Themen 17
MiMa ArrayList sortieren?? Allgemeine Java-Themen 5
Curtis_MC Pointer mit ArrayList vergleichen Allgemeine Java-Themen 6
F ArrayList`s in Klassen mit Getter/Setter Allgemeine Java-Themen 8
W Array vs. ArrayList vs. HashMap Allgemeine Java-Themen 20
F Arraylist vollständig abspeichern und laden Allgemeine Java-Themen 1
R Arraylist in andere Klasse leiten und bearbeiten Allgemeine Java-Themen 10
D ArrayList Indexlänge ändern Allgemeine Java-Themen 2
E Elemente innerhalb einer ArrayList vergleichen Allgemeine Java-Themen 33
K ursprüngliche ArrayList ändert sich bei Übergabe in Methode Allgemeine Java-Themen 18
N Mehrdimensionale ArrayList mischen Allgemeine Java-Themen 10
S JTable - mehrere ausgewählte Rows in ArrayList Allgemeine Java-Themen 5
MiMa Date aus einer ArrayList<Date> holen ?? Allgemeine Java-Themen 5
MiMa ArrayList Rückgabewerte aus einer Funktion Allgemeine Java-Themen 15
L CSV File lesen, in ArrayList speichern und ausgeben Allgemeine Java-Themen 3
M Was geschieht mit Java-Klasse, die aus ArrayList entfernt wird? Allgemeine Java-Themen 10
M Methoden Generische Methode für ArrayList Allgemeine Java-Themen 7
T Collections ArrayList Sortieren Allgemeine Java-Themen 4
P GUI: ArrayList anzeigen funktioniert nicht Allgemeine Java-Themen 5
H ArrayList: Leere Elemente finden? Allgemeine Java-Themen 2
GreenTeaYT Verständnisprobleme zur Arraylist Allgemeine Java-Themen 1
T Methoden Methode zum durchsuchen einer ArrayList Allgemeine Java-Themen 8
K ArrayList sortieren Allgemeine Java-Themen 16
A Bestimmte Inhalte aus ArrayList 1 in ArrayList 2 kopieren Allgemeine Java-Themen 6
S Mehrdimensionales ArrayList ins HashSet Allgemeine Java-Themen 10
C ArrayList Allgemeine Java-Themen 8
Streeber Probleme mit AWT-EventQueue: ArrayList Elemente hinzufügen Allgemeine Java-Themen 1
F Methoden Arraylist weiterverwenden nach methoden Aufruf Allgemeine Java-Themen 2
Z NullPointerException beim Schreiben einer ArrayList in eine Datei Allgemeine Java-Themen 6
K Array in ArrayList Allgemeine Java-Themen 16
Paul15 2D Arraylist in Jtable Allgemeine Java-Themen 1
Paul15 Arraylist 2D Allgemeine Java-Themen 8
B ArrayList in ein Objekt legen Allgemeine Java-Themen 1
Neumi5694 Datentypen ArrayList vs TreeMap Allgemeine Java-Themen 6
F ArrayList Allgemeine Java-Themen 11
X ArrayList will nicht so wie ich will. Hilfe Allgemeine Java-Themen 8
N ArrayList in eigenem Object nicht richtig serialisierbar Allgemeine Java-Themen 14
M ArrayList mit verschiedenen Datentypen in String konvertieren Allgemeine Java-Themen 10
Z Elemente einer ArrayList von rechts wegnehmen Allgemeine Java-Themen 5
W Arraylist Text Suchen und Datei löschen Allgemeine Java-Themen 5
R ArrayList und HashMap Allgemeine Java-Themen 7
T ArrayList zeilenumbruch entfernen Allgemeine Java-Themen 13
D Arraylist/For Schleife/Scanner Allgemeine Java-Themen 30
E ArrayList Anzahl der gleichen Elemente Allgemeine Java-Themen 4
Doopy ArrayList plötzlich leer Allgemeine Java-Themen 2
D Arraylist eigener Klasse an iReport übergeben Allgemeine Java-Themen 7
L ArrayList Inhaltstyp. Allgemeine Java-Themen 5
Z Klassen ArrayList selbst machen Allgemeine Java-Themen 5
J Arraylist speichern und laden? Allgemeine Java-Themen 5
C Generics Objekt in ArrayList Allgemeine Java-Themen 2
D ArrayList index auf gültigkeit prüfen Allgemeine Java-Themen 12
M ArrayList<String> Frage Allgemeine Java-Themen 7
O ArrayList kaputt?! Allgemeine Java-Themen 5
M ArrayList<Foo> in ein Foo[] konvertieren? Allgemeine Java-Themen 8
Bananabert Abstract ArrayList Allgemeine Java-Themen 4
A Collections Array-Elemente in ArrayList kopieren ohne Schleife Allgemeine Java-Themen 7
O ArrayList - Serialisierungs-Problem Allgemeine Java-Themen 11
M JTable + ArrayList Allgemeine Java-Themen 3
M Datentypen ArrayList in Integer konvertieren Allgemeine Java-Themen 3
O Collections ListIterator gibt Inhalt von ArrayList nicht aus Allgemeine Java-Themen 3
Madlip Variablen 3 Werte aus ArrayList und weiter ... Allgemeine Java-Themen 4
S arraylist nach n. Eintrag numerisch Sortiren Allgemeine Java-Themen 5
O Problem beim Auslesen einer Arraylist von JComboBoxen Allgemeine Java-Themen 2
R Threads korrekte Synchronisation bei Vector und ArrayList Allgemeine Java-Themen 6
M Kovariante Rückgabewerte mit ArrayList Allgemeine Java-Themen 3
H LinkedList<LinkedList<String>> nach ArrayList<ArrayList<String>> ? Allgemeine Java-Themen 9
E NetBeans Vector durch ArrayList ersetzen Allgemeine Java-Themen 4
Maxim6394 Problem mit ArrayList Allgemeine Java-Themen 5
E Berechnung in Arraylist Allgemeine Java-Themen 10
E ArrayList mit unbekannter Größe Allgemeine Java-Themen 8
V Fork Join bei Arraylist Allgemeine Java-Themen 6
H Fehler in Arraylist Allgemeine Java-Themen 2
S Datensätze in eine ArrayList<Movie> speichern Allgemeine Java-Themen 13
S Alle Kombinationen aus ArrayList - Potenzmenge Allgemeine Java-Themen 7
V ArrayList vergleichen mit .equals? Allgemeine Java-Themen 13
J ArrayList-Problem Allgemeine Java-Themen 16

Ähnliche Java Themen

Neue Themen


Oben