Java Treemap macht nur im Ansatz was ich will...

masslet

Lieutenant
Registriert
Juli 2004
Beiträge
700
Hallo,

ich programmiere ein kleines Java-Tool, dass Daten aus .txt Dateien extrahieren und anschließend in Excel-Dateien schreiben soll.

Mein Hauptproblem derzeit ist die sinnvolle "interne" Speicherung der gesammelten Daten. Das Extrahieren ist kein Problem. Eine ArrayList wollte ich das nicht verwenden, primär da ich nicht immer über den gesamten Datenbestand iterieren möchte. Die Daten lassen sich jeweils einem Datum zuordnen, daher dachte ich das eine Treemap ein ganz guter Ansatz sein könnte. Key wäre das Datum (ATM als String) und Value ein Objekt, einer selbst erstellten Klasse (JOBGroup), das sämtliche Daten für einen Tag speichern soll.

Mit folgendem Code bekomme ich schön für jeden Tag einen entsprechenden Key, aber als Value wird immer das selbe Objekt JOBGroup referenziert. Zumindest hat es den Anschein, da sämtliche Einträge in der Treemap die gleichen Werte für startTimeJobGroup und endTimeJobGroup haben (die letzten die aus der Textdatei ausgelesen wurden).

Habe gerade eine geistige Blockade und keine Idee wie ich das sinnvoll lösen kann. Wäre für sämtliche Lösungsvorschläge dankbar!

Code:
        // Textdatei wird zeilenweise durchlaufen bis Ende erreicht wird
        for (int i = 0; i < sOpenFile.length; i++) {
			// Extrahiert die Zeiten; füllt startTimeJobGroup, endTimeJobGroup
            extractTimes(i, 1, sOpenFile[i], sJobGroupStart);
            extractTimes(i, 2, sOpenFile[i], sJobGroupEnd);
            // Heute = ermitteltes Datum um 8:00 Uhr
            GregorianCalendar today = new GregorianCalendar();
            today.set(startTimeJobGroup.get(Calendar.YEAR), startTimeJobGroup.get(Calendar.MONTH), startTimeJobGroup.get(Calendar.DATE), 8, 0, 0);
            // Morgen = ermitteltes Datum +1 Tag um 8:00 Uhr
            GregorianCalendar tomorrow = new GregorianCalendar();
            tomorrow.set(startTimeJobGroup.get(Calendar.YEAR), startTimeJobGroup.get(Calendar.MONTH), (startTimeJobGroup.get(Calendar.DATE) + 1), 8, 0, 0);

            // Wenn der Startjob nach 8:00 Uhr (heute) und vor 8:00 Uhr (morgen) sowie der Endjob nach dem Startjob
            // und vor 8:00 (morgen) gelaufen ist (*schweißvonderstirnwisch*) sollten die beiden zusammengehören
            if (startTimeJobGroup.after(today) && startTimeJobGroup.before(tomorrow) && endTimeJobGroup.after(startTimeJobGroup) && endTimeJobGroup.before(tomorrow)) {
                // Ein neues Objekt JOBGroup wird mit den gefundenen Start- und Endzeiten erstellt
                // und in der TreeMap (dataOctopus) dem (String) Datum zugeordnet 
                String sDate = today.get(Calendar.DATE) + "." + (today.get((Calendar.MONTH)) + 1) + "." + today.get(Calendar.YEAR);
                dataOctopus.put(sDate, new JOBGroup(startTimeJobGroup, endTimeJobGroup));
            }
        }
 
Hi,
an welcher Stelle deklarierst du eigentlich "startTimeJobGroup" und "endTimeJobGroup"? Für mich sieht es so aus als, ob das Member deines Objektes sind, aus dem der Code stammt. Falls das der Fall ist, dann arbeitest du immer mit den selben Objekten, die natürlich innerhalb der TreeMap auch nur referenziert werden. Das müsste man im Debugger leicht nachvollziehen können.
Mein Vorschlag wäre, dass du an die Methode "extractTime" nen Rückgabewert machst und innerhalb deiner For-Schleife jeweils einem neuen Objekt zuweist.

Hoffe das hilft.
 
Habe es gelöst...und komme mir echt sau doof vor... :rolleyes:

"startTimeJobGroup" und "endTimeJobGroup" sind übrigens Klassenvariablen, der Konstruktor von JOBGroup extrahiert die enthaltenen Werte und erstellt neue Kalenderobjekte.

Der Code war soweit richtig, alles wurde richtig zugewiesen etc. (Debugger hat das auch gezeigt - hätte ich wohl mal früher benutzen sollen), allerdings habe ich bei der Problemsuche mein Objekt JOBGroup etwas vernachlässigt: Meine Kalenderobjekte im Objekt waren spannenderweise als static deklariert...
 
Zurück
Oben