Input/Output Sortieren Speichern Laden von ArrayListe

lyjlq

Mitglied
Hallo Forum Mitglieder,

ich bin Java Anfänger und versuch ein Objekt in einer „ArrayListe“ zu verwalten.
Ein Objekt erstellen, löschen, ändern und suchen in der „ArrayListe“ klappt.
Das Speicher und Laden der Liste als XML Datei mit „XMLEncoder“ funktionier auch.
Nun wollte ich das Sortieren der Liste machen was auch klappt. Aber wen ich jetzt die Liste Speichere und das Programm neu Starte und die Daten neu Laden sind alle sortierten Daten in der Liste Doppelt?????

Wie kann ich verhindern das die Sortier Informationen mit gespeichert erden und dadurch die Doppelten Objekt beim einlesen entstehen.

Danke für eure Hilfe im vorraus.


Nun kommt der Quelltext vom Speichern und Laden der Liste

Java:
	    public void ObjectSichern  (List<AbstractBasis> basisListe, String filename){
	    	XMLEncoder enc = null;
	    	try {
	    		enc = new XMLEncoder (new DataOutputStream( new BufferedOutputStream( new FileOutputStream (filename) ) ));
		    	for (AbstractBasis listObject : basisListe){
		    		enc.writeObject(listObject);
		    	}
		    	enc.flush();
	    		enc.close();
	      	} catch (IOException e) {
	      		System.out.println("Fehler beim Erstellen der Datei :_ "+e);
	      	}
	    }
	    
	    public List<AbstractBasis> ObjectLesen( String filename) {
	    	XMLDecoder dec = null;
	    	AbstractBasis  line =null;
	    	basisListe.clear();
	    	try {
	    		dec = new XMLDecoder(new DataInputStream( new BufferedInputStream( new FileInputStream (filename) ) ));
	    		while(null != (	line =(AbstractBasis) dec.readObject())) {
	    			basisListe.add((AbstractBasis)line);
	    		}
	    		dec.close();
	    	} catch (IOException e) {
	    		System.out.println("Fehler beim Erstellen der Datei :_ "+e);
	    	} catch (Exception e){ 
	    		if (e.equals("java.lang.ArrayIndexOutOfVoundsEception ??")) {
	    			System.out.println("Exeption e :_"+e);
	    		}
	    	}
	    	return basisListe;   
	    }

Meine Sortierung

Java:
package Kassenbuch.Sort;

import java.util.Comparator;

import Kassenbuch.objekt.Konto;

public class SortKontoToNrUp implements Comparator <Konto>
{		@Override public int compare(Konto konto1, Konto konto2) {
		if (konto1.getNr() < konto2.getNr()) return -1; 
		else if (konto1.getNr() == konto2.getNr()) return 0; 
		else return 1; 
	    }
}

Die gespeicherte XML Datei.

[XML] <?xml version="1.0" encoding="UTF-8" ?>
- <java version="1.7.0" class="java.beans.XMLDecoder">
- <object class="Kassenbuch.objekt.Konto" id="Konto0">
- <void property="kontobeschreibung">
<string>Beschreibung2</string>
</void>
- <void property="kontonummer">
<int>1</int>
</void>
</object>
- <object class="Kassenbuch.objekt.Konto" id="Konto1">
- <void property="kontobeschreibung">
<string>Beschreibung1</string>
</void>
- <void property="kontonummer">
<int>2</int>
</void>
</object>
- <object class="Kassenbuch.objekt.Konto" id="Konto2">
- <void property="kontobeschreibung">
<string>Beschreibung3</string>
</void>
- <void property="kontonummer">
<int>3</int>
</void>
</object>
<object idref="Konto2" />
<object idref="Konto1" />
<object idref="Konto0" />
</java>[/XML]
 
N

nillehammer

Gast
Die einfachste Variante wäre, vor dem add mit contains zu prüfen:
[JAVA=21]
while(null != ( line =(AbstractBasis) dec.readObject())) {
if(!basisListe.contains(line) {
// der Cast beim add war überflüssig. Habe ihn darum entfernt
basisListe.add(line);
}
}

[/code]
Diese Variante ist bei größeren Datenmengen aber langsam, weil die Liste plump durchiteriert wird. Überlege, ob Du nicht mit Sets und in Deinem Fall mit SortedSet besser bedient bist.

Folgende Grundüberlegungen als Hinweis für die Auswahl des besten Collection-Typs:
1. Zugriff über Index und garantierte Reihenfolge der Elemente --> List
2. Verhinderung von Duplikaten --> Set
3. 1. und 2. zusamen --> Gibt's im Collections-API nicht, also Libraries benutzen oder selbst implementieren
4. Mappen von Keys auf Values --> Map (In Deinem Fall evtl. Kontunummer als Key und den Rest als value)

Bei Sets und Maps gibt es auch noch die sortierten Varianten.
 
Zuletzt bearbeitet von einem Moderator:

lyjlq

Mitglied
Danke für die schnelle Antwort nillehammer,

zu 1.
„1. Zugriff über Index und garantierte Reihenfolge der Elemente --> List“

Ich glaube ich habe da was an Infos Unterschlagen. :oops:
Meine „ArrayListe“ ist in Wirklichkeit eine „List“

„protected static List<AbstractBasis> basisListe = new ArrayList<AbstractBasis>();“

zu 2.
„2. Verhinderung von Duplikaten --> Set“

Ja das habe ich gemacht beim erstellen oder Ändern prüfe ich ob ein Objekt mit diesen Werten existiert. Jedes Objekt gibt es nur ein Mal.
Wenn ich die Liste neu erstelle und ohne einmal zu sortieren Speichere
Sind die Zeilen 27, 28 und 29 nicht da. Also erstellt meine Sortierung die „idref“ die auch gespeichert und beim Laden als Vollwertiges Objekt erstellt werden.
Also wie bekomme ich die „idref“ aus der Liste damit ich sie nicht speichere, oder wie verhindere ich die Entstehung (Was meinst Du mit „Set“) ???:L

zu 3.
„3. 1. und 2. zusammen --> Gibt's im Collections-API nicht, also Libraries benutzen oder selbst implementieren“

M, hä, verstehe ich nicht. Ich habe gedacht ich hätte eine eine Collections gebastelt?:shock:

Was habe ich falsch gemacht, bitte helft mir auf die Sprünge,

zu 4.
„4. Mappen von Keys auf Values --> Map (In Deinem Fall evtl. Kontunummer als Key und den Rest als value)“

Eins nach dem Anderen erst die Liste dann das Nächste.:bae:

Gruß lyjlq:shock:
 
S

SlaterB

Gast
im Quellcode ist kein sort-Aufruf erkennbar, damit auch nicht welchen Einfluss das hat,
wie sieht dein Programm mit bzw. ohne sort aus? der gepostete Code zum Speichern und Laden ist davon doch wohl unabhängig,
die XML-Datei sieht auch ok aus, wenn genau die eingelesen wird dann ist doch nicht jedes Objekt doppelt oder?

zeige exakt wo das Problem besteht,
z.B. was mit dieser geposteten XML-Datei ist,

wenn genau diese in ObjectLesen() (Methoden immer klein schreiben!) ankommt, was passiert dann?
wie oft wird die Schleife durchlaufen, 3x, 3 Objekte in der Liste? oder 6 Objekte? von 6x Schleife oder auf anderem Wege?

vielleicht nur 3x, aber in der Liste waren schon 3 Elemente drin?
(ok, basisListe.clear(); davor sollte das ausschließen)

werden 3 Elemente eingelesen, aber dann kommt sort() und schon sind es 6,
also ganz unabhängig von Laden/ Speichern irgendwo anders ein Problem?

mit solchen Hinweisen, genannt Information ;) , könnte es vorangehen, bisher ist eigentlich alles unklar

> Wie kann ich verhindern das die Sortier Informationen mit gespeichert erden und dadurch die Doppelten Objekt beim einlesen entstehen.

was für eine Information ist das, wie unterscheiden sich die Dateien vorher/ nachher,
außer vielleicht durch die Reihenfolge der Einträge, die aber genausogut zufällig sein könnte?


edit:
> Wenn ich die Liste neu erstelle und ohne einmal zu sortieren Speichere Sind die Zeilen 27, 28 und 29 nicht da.

ok, lesen will gelernt sein..,
und gespeichert werden nur 3 Elemete? wie sieht dort die Schleife aus? einzeln geprüft
 
Zuletzt bearbeitet von einem Moderator:
N

nillehammer

Gast
zu 1.
„1. Zugriff über Index und garantierte Reihenfolge der Elemente --> List“

Ich glaube ich habe da was an Infos Unterschlagen.
Meine „ArrayListe“ ist in Wirklichkeit eine „List“

„protected static List<AbstractBasis> basisListe = new ArrayList<AbstractBasis>();“
Das weiß ich. Es ging mir hier um die Auswahl des richtigen Collection-Typs (Interface). Das heißt eben List. ArrayList ist eine Implementierung davon.
zu 2.
„2. Verhinderung von Duplikaten --> Set“

Ja das habe ich gemacht beim erstellen oder Ändern prüfe ich ob ein Objekt mit diesen Werten existiert. Jedes Objekt gibt es nur ein Mal.
Wenn ich die Liste neu erstelle und ohne einmal zu sortieren Speichere
Sind die Zeilen 27, 28 und 29 nicht da. Also erstellt meine Sortierung die „idref“ die auch gespeichert und beim Laden als Vollwertiges Objekt erstellt werden.
Also wie bekomme ich die „idref“ aus der Liste damit ich sie nicht speichere, oder wie verhindere ich die Entstehung (Was meinst Du mit „Set“)
Hier sind zwei Fragen enthalten. Bitte nicht durcheinander bringen.
1. Du prüfst vor dem adden nicht, ob das Element in der Liste bereits enthalten ist. Dass Elemente beim einmaligen laden nicht doppelt vorkommen, liegt daran, dass sie in den Quelldaten nicht doppelt sind.
2. Set ist eine Datenstruktur, die aus sich heraus Duplikate verhindert. Darum brauchst Du Dich nicht mehr selbst zu kümmern. Wenn diese Anforderung für Dich besonders wichtig ist und der Zugriff per Index nicht so wichtig, ist ein Set die bessere Datenstruktur für Deine Anwendung
zu 3.
„3. 1. und 2. zusammen --> Gibt's im Collections-API nicht, also Libraries benutzen oder selbst implementieren“

M, hä, verstehe ich nicht. Ich habe gedacht ich hätte eine eine Collections gebastelt?
In Java gibt es eine Reihe von Klassen, um eine Menge von Elementen irgendwie abzuspeichern. Dazu kommen noch diverse Hilfklassen. All diese Klassen zusammen werden Collections-API genannt. Du hast List/ArrayList verwendet. Du arbeitest also bereits mit dem Collections-API. Viele Leute, die damit anfangen, stolpern erst über List/ArrayList. Merken dann, dass sie Duplikate haben und stellen die Frage: "Wie verhinder ich Duplikate?" Als Antwort kommt dann: "Nimm Set." Das machen sie dann und merken, dass man hier nicht direkt über Index auf die Elemente zugreifen können. Ich wollte nur darauf hinweisen, dass beide Anforderungen gleichzeitig nicht out ouf the box unterstützt werden.

Und zur Ursprungsfrage:
-Bleib erstmal bei List
-Vor jedem Aufruf von add, prüfe mit contains (siehe mein Post von Heute, 12:37 )
-Damit contains funktioniert, muss Java erkennen, wann Elemente gleich sind. Das Kriterium dafür ist bei Dir wohl die Kontonummer. In Deiner Klasse AbstractBasis überschreibe equals und gib true zurück, wenn die Kontonummern gleich sind.
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
@nillehammer
wieso ist denn hier contains + Doppelte ein Thema?

soweit ich das lese geht es doch nur um Sortierung,
dabei passiert vielleicht ein Fehler, der alle Elemente neu einfügt,
aber deswegen die Liste zu einem Set umzufunktionieren ist doch keine Lösung

sollte man nicht den genauen Zeitpunkt des ersten Doppelten herausfinden, diese Codestelle korrigieren?
das ist jedenfalls mein Ziel ;)


also Prüfen mit contains() vielleicht durchaus, sofern vorhanden,
aber wenn ja, dann nicht an dieser Stelle auf das add verzichten sondern sich bemerkbar machen
und untersuchen, warum das an dieser Stelle passiert (bei Testdaten wo es nicht vorkommen sollte)

beim Laden ist es zu spät, beim Speichern sind hoffentlich 6 Elemente in der Liste ein Grund,
wieso diese 6 da drin sind, das muss untersucht werden
 
N

nillehammer

Gast
[OT]
Java:
catch (Exception e){ 
                if (e.equals("java.lang.ArrayIndexOutOfVoundsEception ??")) {
                    System.out.println("Exeption e :_"+e);
                }
            }
Der catch-Block hier ist überflüssig und auch noch fehlerhaft. Entferne ihn ersatzlos.
[/OT]
 
N

nillehammer

Gast
SlaterB hat gesagt.:
@nillehammer
wieso ist denn hier contains + Doppelte ein Thema?
Hatte es so verstanden, dass beim erneuten Einlesen bereits in der Liste vorhandene Werte eben nochmal geaddet werden. Dem ist nicht so?
SlaterB hat gesagt.:
soweit ich das lese geht es doch nur um Sortierung,
dabei passiert vielleicht ein Fehler, der alle Elemente neu einfügt,
Hatte ich als Fehlerursache ausgeschlossen, da ich annahm, dass Collections.sort verwendet wurde. Aber die Annahme kann natürlich völlig falsch sein. Da hast Du Recht.

Ok, halte mich jetzt mal zurück und warte ab, was vom TO noch kommt.
 
Zuletzt bearbeitet von einem Moderator:

lyjlq

Mitglied
Hallo SlaterB, nillehammer,

nicht so Schnell ihr beiden ich komm nicht nach. :D

„(Methoden immer klein schreiben!)“ ups Ein Tippfehler ist korrigiert.

Die Mehtoden objectLesen, objectSichern, sind unabhängig von der Sortierung.
Das Sicher und Lesen der XML Datei Funktioniert den sonst hätte ich mich nicht an das sortieren gegeben. Das heißt solange ich in meine Programm nicht ein Sortieraufruf machen sind alle Objekte nur ein Mal da. Und in der XML Datei findet man keine „idref“ einträge.

Wen ich aber nur ein einziges Mal sortiert haben sind auf einmal die „idref“ einträge nach dem speichern da und nach einen neuen Laden sind die Daten Doppelt da.

Also wen ich das Programm laufen lasse und die 3 Objekte neu Anlege dann werden nur 3 Objekte gespeichert.
Programm beenden.
[XML] <?xml version="1.0" encoding="UTF-8" ?>
- <java version="1.7.0" class="java.beans.XMLDecoder">
- <object class="Kassenbuch.objekt.Konto">
- <void property="kontobeschreibung">
<string>Beschreibung3</string>
</void>
- <void property="kontonummer">
<int>3</int>
</void>
</object>
- <object class="Kassenbuch.objekt.Konto">
- <void property="kontobeschreibung">
<string>Beschreibung1</string>
</void>
- <void property="kontonummer">
<int>2</int>
</void>
</object>
- <object class="Kassenbuch.objekt.Konto">
- <void property="kontobeschreibung">
<string>Beschreibung2</string>
</void>
- <void property="kontonummer">
<int>1</int>
</void>
</object>
</java>[/XML]
Programm Starten.
Daten laden 3 Objekte werden geladen.
Einmal sortieren und dann speichern. Jetzt wird die objectSichern Schleife 6 mal durchlaufen???;(

[XML] <?xml version="1.0" encoding="UTF-8" ?>
- <java version="1.7.0" class="java.beans.XMLDecoder">
- <object class="Kassenbuch.objekt.Konto" id="Konto0">
- <void property="kontobeschreibung">
<string>Beschreibung2</string>
</void>
- <void property="kontonummer">
<int>1</int>
</void>
</object>
- <object class="Kassenbuch.objekt.Konto" id="Konto1">
- <void property="kontobeschreibung">
<string>Beschreibung1</string>
</void>
- <void property="kontonummer">
<int>2</int>
</void>
</object>
- <object class="Kassenbuch.objekt.Konto" id="Konto2">
- <void property="kontobeschreibung">
<string>Beschreibung3</string>
</void>
- <void property="kontonummer">
<int>3</int>
</void>
</object>
<object idref="Konto2" />
<object idref="Konto1" />
<object idref="Konto0" />
</java>[/XML]

Und nun der Sortier Aufruf.

Java:
 Collections.sort(kontoListe, new SortKontoToNrUp());

So was wolt (müsst) Ihr noch wissen?

Gruß lyjlq
 
S

SlaterB

Gast
was man wissen will steckt im einfachsten Befehl der Welt, vom aller ersten Hello World-Programm:

Java:
System.out.println("Anzahl vor Sortieren: "+kontoListe.size());
 Collections.sort(kontoListe, new SortKontoToNrUp());
System.out.println("Anzahl nach Sortieren: "+kontoListe.size());

...

public void objectSichern ..

   System.out.println("Anzahl vor Speichern: "+kontoListe.size());
   for (..) {
     System.out.println("Schleifendurchlauf");
wie oft wird die Schleife durchlaufen? du sagst selber 6x, was ist die size() vorher? auch 6 oder nur 3,
wie sieht es vor und nach dem Speichern aus?



irgendwann muss doch Size 6 kommen, kaum durch Collections.sort(), wenn dann eher noch weiter vor,
aber man braucht gar nicht vorher groß herumraten, erst Informationen einholen

das Ziel: so genau wie möglich eingrenzen, wann sich die Size von 3 auf 6 erhöht, bzw. einfach alle Änderungen,
wann darf wer wo warum wie etwas einfügen,

noch nicht ganz klar: verwendest du einfach nur ArrayList oder irgendwas in Eigenimplementierung bei der Liste?

> Also wen ich das Programm laufen lasse und die 3 Objekte neu Anlege dann werden nur 3 Objekte gespeichert.
[..]
> Daten laden 3 Objekte werden geladen.

ist beim zweiten Durchlauf mit "Laden" der vorherige Code für "neu anlegen" parallel auch noch aktiv?
 
Zuletzt bearbeitet von einem Moderator:

lyjlq

Mitglied
Danke erst mal an euch Beiden,

ich muss erst mal ein par Zeilen in den Methoden was ändern damit ich ein lesbares log erzeuge kann.
Den die Zahlen die ich da grade im schnell verfahren raus bekommen haben lassen mich ein wenig verwirrt. Und mein Zeit für heut ist um.

Bis Morgen.
:bahnhof:
 

lyjlq

Mitglied
Hallo Leute,

Endschuldigung das ich solange gebraucht habe hatte leider keine Zeit gehabt.

Ich sollte ein Log machen um heraus zu bekommen wo auf einmal sich die Objekte verdoppeln.

Hier ist das Log:

Code:
Konto Neu						// Was für eine Methode wird aufgerufen.
Nr: 3 Txt: Beschreibung3 Wert: 0.0		// Welche werte sind im Objekt.
Wieviele Konten werden geholt Konten: 0	// Wieviele werte sind in der Liste 
Wieviele Konten werden gespeichert Konten: 1	// Wieviele werte werden in der Liste gespeichert 
Konto Neu
Nr: 2 Txt: Beschreibung1 Wert: 0.0
Wieviele Konten werden geholt Konten: 1
Wieviele Konten werden gespeichert Konten: 2
Konto Neu
Nr: 1 Txt: Beschreibung2 Wert: 0.0
Wieviele Konten werden geholt Konten: 2
Wieviele Konten werden gespeichert Konten: 3
Speichern						// List Speichern
Wieviele Konten werden geholt Konten: 3
Wieviele Konten sollen gesichert werden: 3
Nr: 3 Txt: Beschreibung3 Wert: 0.0
Nr: 2 Txt: Beschreibung1 Wert: 0.0
Nr: 1 Txt: Beschreibung2 Wert: 0.0
3							// Schleife zum Speicher x Durchlaufen
Beenden						// Programm ende

Programm neu Start

Code:
Öffnen							// ObjekteLaden
***
Nr: 3 Txt: Beschreibung3 Wert: 0.0		
1							// Schleifen Zähler
***
Nr: 2 Txt: Beschreibung1 Wert: 0.0
2
***
Nr: 1 Txt: Beschreibung2 Wert: 0.0
3
Fehler beim Lesen der Datei :_ java.lang.ArrayIndexOutOfBoundsException: 3
		// was mach ich mit der Fehlermeldung ?
Eingelesene Objekte: 3
Wieviele Konten wurden geladen: 3
Wieviele Konten werden gespeichert Konten: 3
Kontonummer Up					// Sortiere Objekte
Wieviele Konten werden geholt Konten: 3
Anz Konten3
Anz Konten3
Nr: 1 Txt: Beschreibung2 Wert: 0.0
Nr: 2 Txt: Beschreibung1 Wert: 0.0
Nr: 3 Txt: Beschreibung3 Wert: 0.0
Speichern
Wieviele Konten werden geholt Konten: 3
Wieviele Konten sollen gesichert werden: 6 	<<<<<< ????? Wie das 
Nr: 1 Txt: Beschreibung2 Wert: 0.0
Nr: 2 Txt: Beschreibung1 Wert: 0.0
Nr: 3 Txt: Beschreibung3 Wert: 0.0
Nr: 3 Txt: Beschreibung3 Wert: 0.0
Nr: 2 Txt: Beschreibung1 Wert: 0.0
Nr: 1 Txt: Beschreibung2 Wert: 0.0
6
Beenden

:autsch:

Hier die Methoden Laden und Speichern der Daten.

Java:
	    public void objectSichern  (List<AbstractBasis> basisListe, String filename){
	    	int i=0;
	    	XMLEncoder enc = null;
	    	try {
	    		enc = new XMLEncoder (new DataOutputStream( new BufferedOutputStream( new FileOutputStream (filename) ) ));
		    	for (AbstractBasis listObject : basisListe){
		    		enc.writeObject(listObject);
		    		i=i+1;
		    		listObject.toLogGui();
		    	}
		    	enc.flush();
	    		enc.close();
	      	} catch (IOException e) {
	      		System.out.println("Fehler beim Erstellen der Datei :_ "+e);
	      	}
	    	System.out.println(i);
	    }
	    
	    public List<AbstractBasis> objectLesen( String filename) {
	    	int i=0;
	    	XMLDecoder dec = null;
	    	AbstractBasis  line =null;
	    	basisListe.clear();
	    	try {
	    		dec = new XMLDecoder(new DataInputStream( new BufferedInputStream( new FileInputStream (filename) ) ));
	    		while(null != (	line =(AbstractBasis) dec.readObject())) {
	    			System.out.println("***");
	    			basisListe.add((AbstractBasis)line);
	    			i=i+1;
	    			line.toLogGui();
	    			System.out.println(i);
	    		}
	    		dec.close();
	    	} catch (IOException e) {
	    		System.out.println("Fehler beim Lesen der Datei :_ "+e);
	    	} catch (Exception e) {
	    		System.out.println("Fehler beim Lesen der Datei :_ "+e);
	    	}
	    	
	    	System.out.println("Eingelesene Objekte: "+i);
	    	return basisListe;   
	    }

Objekt Konten hier wird das Laden und Sichern nur durchgereicht und die Liste mit set und get immer abgelegt.

Java:
public class Konten extends AbstractTools
{
	List<AbstractBasis> object = new ArrayList<AbstractBasis>();
	static List<Konto> kontoListe =new ArrayList<Konto>();
	private String filename = "Kassenbuch-Konto.ser.xml";
	
	public List<Konto> getKontenListe() {
		System.out.println("Wieviele Konten werden gehohlt Konten: "+ kontoListe.size());
		return kontoListe;
	}
	
	public void setKontenListe(List<Konto> hmKonten) {
		kontoListe.clear();
		kontoListe.addAll(hmKonten);
		System.out.println("Wieviele Konten werden gespeichet Konten: "+ kontoListe.size());
	}

	    public void KassenbuchKontoSichern(List<Konto> kontoListe) {
	    	object.addAll(kontoListe);
	    	System.out.println("Wievile Konten sollen gesichert werden: "+ object.size());
	    	objectSichern(object, filename);
	    }
	    
	    public List<Konto> KassenbuchKontoLesen(){
	    	for (Object listObject : objectLesen(filename)){
	    		Konto konto = (Konto) listObject;
	    		kontoListe.add(konto);
	    	}
	    	System.out.println("Wievile Konten wurden geladen: "+kontoListe.size());
	    	return kontoListe;
	    }

Hier noch mal der Comparator

Java:
import java.util.Comparator;

public class SortKontoToNrUp implements Comparator <Konto>
{		@Override public int compare(Konto konto1, Konto konto2) {
		if (konto1.getNr() < konto2.getNr()) return -1; 
		else if (konto1.getNr() == konto2.getNr()) return 0; 
		else return 1; 
	    }
}

Hier der Aufruf der Sortierung aus der Gui.

Java:
 if (event.getActionCommand() == "Kontonummer Up") {
			   kontoListe.clear();
			   kontoListe.addAll(konten.getKontenListe());
			   System.out.println("Anz Konten"+ kontoListe.size());
			   Collections.sort(kontoListe, new SortKontoToNrUp());
			   System.out.println("Anz Konten"+ kontoListe.size());
			   for (Konto listKonto : kontoListe) {
		    		s1 += listKonto.toLogGui();
		    	}

Ich hoffe ich habe jetzt alles zusammen.

Danke
 
Zuletzt bearbeitet:
S

SlaterB

Gast
noch wichtiger als das Log ist in diesem Fall der Quellcode,

du hast also parallel eine [c]List<Konto> kontoListe[/c] und eine [c]List<AbstractBasis> object[/c] ?
wenn du im Log mal die Size der einen, mal die Size der anderen ausgibst, kann ja nur schwer ein klares Bild herauskommen,
ich habe versucht es soweit wie möglich nachzuvollziehen, aber noch sehe ich die Ursache nicht,

aber es geht immerhin gut voran,
nächste genau gezielte Präzisionsschläge:
- in KassenbuchKontoSichern() gib die Size der Liste 'object' vor dem addAll() aus, waren schon 3 drin bevor du jetzt die 3 einfügst?
- untersuche weiter 'object', füge eine weiteren Buchstaben in den Variablenname ein, wo gibt es Fehlermeldungen,
wo wird diese Variable noch benutzt oder ist das vollständiger Quellcode der Klasse Konten?
wird die Liste 'object' noch irgendwo herausgegeben und woanders benutzt?

bei 'Sortierung aus der Gui' hast du ja auch noch eine Liste 'kontoListe', was passiert mit der eigentlich,
werden deren drei Element in irgendeiner Form an das Konto-Objekt zurückgegeben?
mit setKontenListe()? was passiert danach mit der Liste in der GUI, bzw. wo kommt diese her,
falls sie zufällig 'object' aus Konto sein sollte.., auch wenn unwahrscheinlich, da wohl anderer generischer Typ

generell hast du zuviele Listen,
wieso muss Konto zwei haben und dann noch bei [c]public void KassenbuchKontoSichern(List<Konto> kontoListe)[/c]
eine dritte von außen bekommen? kann KassenbuchKontoSichern() nicht die eigene Liste sichern, ist die nicht aktuell?

in der Hinsicht also viel zu tun, den genauen Fehler sehe ich aber noch nicht

-----

beim ObjectSpeichern kannst du List<? extends AbstractBasis> als Parameter angeben,
dann kannst du auch eine List<Konto> übergeben,
beim Laden nicht ganz so leicht, aber dann lieber gleich umkopieren, wie du ja auch machst,
also die object-Liste überflüssig
 
Zuletzt bearbeitet von einem Moderator:

lyjlq

Mitglied
Hallo SlaterB,

ich habe den Fehler gefunden.:oops: Ein einfacher Flüchtigkeits-Fehler.:lol::lol:
Wenn man mit Daten arbeitet sollte man sicherstellen das Variablen immer lehr sind, bzw. sicherstellen das nur die Daten enthält mit den man Arbeiten will.

Neue Zeile 2: :applaus:

Java:
if (event.getActionCommand() == "Speichern") {
			   kontoListe.clear();
			   kontoListe.addAll(konten.getKontenListe());
		   		konten.KassenbuchKontoSichern(kontoListe);		   		
		   }

Danke für eure Hilfe.
 
S

SlaterB

Gast
das soll aber hoffentlich nicht dein korrigierter vorläufiger Endstand sein,
erst holst du die Daten aus konten raus, dann übergibst du sie wieder als Parameter?

schreibe doch einfach nur eine Zeile
> konten.KassenbuchKontoSichern();
!
bzw.
> konten.sichern();
was anderes zu sichern ist wohl bisher kaum da, und Methoden klein schreiben!

die Methode braucht keinen Parameter, eine Liste mit Konten ist doch intern vorhanden,
eben die, die bei getKontenListe() zurückgegeben wird

weitere Vorschläge zu ohne 'object' ja schon zuvor
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B CSV-Datei auslesen, in Liste speichern und sortieren Java Basics - Anfänger-Themen 20
F Collections Datenbankdaten in einer Map speichern, bearbeiten, sortieren und wieder in Datenbank schreiben Java Basics - Anfänger-Themen 20
D Map<String, Integer> sortieren und der reinfolge nach die Glieder abfragen Java Basics - Anfänger-Themen 3
J HashSet mit Comparable sortieren Java Basics - Anfänger-Themen 13
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
S Daten aus Import Datei auslesen und sortieren Java Basics - Anfänger-Themen 2
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
O Sortieren mit Insertion Sort Java Basics - Anfänger-Themen 3
M Bubble Sort - Int[] Array sortieren Java Basics - Anfänger-Themen 2
B Array nach Elementwerten sortieren? Java Basics - Anfänger-Themen 1
L Gegebenes Array sortieren, indem zufällige Zahlenpaare aus Array ausgewählt werden Java Basics - Anfänger-Themen 14
Jambolo Karten sortieren nach Rang und Farbe Java Basics - Anfänger-Themen 5
rosima26 Java nach letzter Ziffer sortieren Java Basics - Anfänger-Themen 19
H Kompliziertes Sortieren einer ArrayList mit Objekten(Sortieren nach X und Y) Java Basics - Anfänger-Themen 11
K verschiedene Eingaben sortieren Java Basics - Anfänger-Themen 6
G zweidimensionales int Array sortieren Java Basics - Anfänger-Themen 57
K Java sortieren. Java Basics - Anfänger-Themen 7
D Array Elemente sortieren in aufsteigender Reihenfolge Java Basics - Anfänger-Themen 10
J Tabelle Sortieren Java Basics - Anfänger-Themen 48
rafi072001 Sortieren einer HashMap nach Values Java Basics - Anfänger-Themen 2
L Sortieren Java Basics - Anfänger-Themen 1
C Wie 2 Arrays zusammenfügen und sortieren? Java Basics - Anfänger-Themen 11
C ArrayList sortieren nach bestimmten Buchstaben in den Wörtern Java Basics - Anfänger-Themen 13
javaluke Erste Schritte Array nach Datentyp sortieren Java Basics - Anfänger-Themen 16
O 2D-Array nach einer Spalte sortieren Java Basics - Anfänger-Themen 22
C Sortieren einer ArrayList Java Basics - Anfänger-Themen 2
A Teilarrays eines 2D-Arrays sortieren Java Basics - Anfänger-Themen 4
JD_1998 Random Array sortieren mit Hilfe einer Methode Java Basics - Anfänger-Themen 4
java3690 eine liste sortieren Java Basics - Anfänger-Themen 12
DorFey Sortieren eines mehrdimensionalen Arrays Java Basics - Anfänger-Themen 8
P Sortieren von Listen nach Attributen Java Basics - Anfänger-Themen 3
W Personen sortieren mit Comparator Java Basics - Anfänger-Themen 9
U Objekte in einer LinkedList sortieren Java Basics - Anfänger-Themen 5
B HashMap alphabetisch sortieren Java Basics - Anfänger-Themen 2
S Streams - Abfrage absteigend sortieren Java Basics - Anfänger-Themen 11
V Collections ArrayList mit Comparator sortieren Java Basics - Anfänger-Themen 16
V Collections int Werte in einer Liste sortieren Java Basics - Anfänger-Themen 23
L Array sortieren Java Basics - Anfänger-Themen 4
L Java Int-Array, Zahlen sortieren Java Basics - Anfänger-Themen 8
T Java: Array monat absteigend sortieren? Java Basics - Anfänger-Themen 1
B Liste sortieren? Java Basics - Anfänger-Themen 4
P Array Sortieren mit boolean? Java Basics - Anfänger-Themen 33
scratchy1 Array sortieren und dann String-Repräsentation ausgeben Java Basics - Anfänger-Themen 2
O Arrays sortieren in einer Methode Java Basics - Anfänger-Themen 2
E Methoden 2 Arrays sortieren (MergeSort) Java Basics - Anfänger-Themen 3
B Suchen und sortieren Java Basics - Anfänger-Themen 10
F Zahlen im Feld sortieren + Unterprogramm Java Basics - Anfänger-Themen 4
O Zweidimensional Array sortieren Java Basics - Anfänger-Themen 14
J Liste,Queue,Stack sortieren Java Basics - Anfänger-Themen 2
CptK Variablen Teile eines Arrays zufällig sortieren Java Basics - Anfänger-Themen 7
K Methoden Array[][] sortieren Java Basics - Anfänger-Themen 30
CptK Datentypen Integer ArrayList sortieren Java Basics - Anfänger-Themen 2
E ArrayList sortieren Java Basics - Anfänger-Themen 16
L Methode zum sortieren Java Basics - Anfänger-Themen 1
L Methode zum sortieren Java Basics - Anfänger-Themen 1
B Sortieren mit Iterator Java Basics - Anfänger-Themen 4
B Wie kann ich die Buchstaben sortieren nach der Höhe der Zahlen Java Basics - Anfänger-Themen 14
A Sortieren ausgerechneter Werte aus einer TXT Datei Java Basics - Anfänger-Themen 8
E LMC (Assembler) Sortieren von 3 Zahlen Java Basics - Anfänger-Themen 4
J String, Int und double Array sortieren Java Basics - Anfänger-Themen 16
F Liste nach einer Variablen sortieren Java Basics - Anfänger-Themen 6
A Array sortieren Java Basics - Anfänger-Themen 1
N StringArray alphabetisch sortieren Java Basics - Anfänger-Themen 4
Tommy135 Erste Schritte JavaDoc Sortieren Java Basics - Anfänger-Themen 5
R Winkel berechnen bzw. Geraden sortieren Java Basics - Anfänger-Themen 33
L (Integer) Liste nach aufsteigender Summe der Ziffern sortieren (mit Bedingung) Java Basics - Anfänger-Themen 8
F HashMap sortieren <String, Long> Java Basics - Anfänger-Themen 3
D Arraylisten sortieren bitte um Hilfe Java Basics - Anfänger-Themen 4
informatikschüler21 String im Array sortieren Java Basics - Anfänger-Themen 4
U Methoden Zweidimensionales Array mit Arrays.sort sortieren? Java Basics - Anfänger-Themen 22
M Arrays sortieren und kleinster Abstand Java Basics - Anfänger-Themen 3
R Interface Eigene Objekte in Listen sortieren mit Interface Comparable Java Basics - Anfänger-Themen 5
N TreeMap alphabetisch sortieren? Java Basics - Anfänger-Themen 3
I <List> sortieren Java Basics - Anfänger-Themen 2
F Interface Nach mehreren Kriterien sortieren Java Basics - Anfänger-Themen 2
R Objekte Vergleichen und Sortieren Java Basics - Anfänger-Themen 3
I Sortieren nach Priorität Java Basics - Anfänger-Themen 3
S List<T<X,Y> sortieren Java Basics - Anfänger-Themen 5
W Array sortieren Java Basics - Anfänger-Themen 3
C JList Einträge nach Datum sortieren Java Basics - Anfänger-Themen 3
Alex/89 Werte einer .txt Datei sortieren Java Basics - Anfänger-Themen 8
N Bubble Sort sortieren mit Int Werte Java Basics - Anfänger-Themen 8
N Collection sortieren/ filtern Java Basics - Anfänger-Themen 7
C Methoden Einfach verkette Liste - int Werte aufsteigend sortieren Java Basics - Anfänger-Themen 1
P Listen sortieren mit Binärbaum gibt keine Ausgabe ab 10000 Integern Java Basics - Anfänger-Themen 14
S array sortieren Java Basics - Anfänger-Themen 7
D Array mit Zufallszahlen, dann sortieren: Hilfe gesucht! Java Basics - Anfänger-Themen 1
D Methoden int-Array absteigend sortieren Java Basics - Anfänger-Themen 8
C Chars in einem String alphabetisch sortieren Java Basics - Anfänger-Themen 1
C OOP array Sortieren ohne den sort Befehl Java Basics - Anfänger-Themen 10
S int-Array mittels Arrays.sort() in einer Schleife sortieren. Java Basics - Anfänger-Themen 2
J Sortieren Java Basics - Anfänger-Themen 21
O Erste Schritte TreeMap nach Value sortieren Java Basics - Anfänger-Themen 2
K Collections Sortieren nach zweiter Spalte in JTable Java Basics - Anfänger-Themen 18
H Strings vergleichen & sortieren Java Basics - Anfänger-Themen 20
J Ungewolltes Sortieren eines Arrays Java Basics - Anfänger-Themen 4
T Collections Sortieren von Automodellen (v.a. BMW und Mercedes) Java Basics - Anfänger-Themen 3
P Liste sortieren verschiedener generischer Typen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben