Array gruppieren

EddyKordo

Mitglied
Hii

ich habe eine ArrayList und möchte diese nach dem Datum gruppieren da ich diese in kw umwandle und dann möchte ich nur die daten in eine neue arraylist schieben die dieselbe kw haben daten kommen aus eine excel tabelle via apache poi
 

EddyKordo

Mitglied
Na ich hab mir vllt gedacht ich schaue wo die kw gleich ist und die speichere ich dann immer neu in eine liste ab

oder hast du ne andere idee ?
 
S

SlaterB

Gast
ohne Ideen ist fast automatisch Hausaufgaben-Bereich, verschoben,

gehe die Rohdaten erstmal durch, berechne zu jedem die kw und speichere alles in einer neuen Datenstruktur,
ein Array von Listen, kw = Index im Array etwa
 

EddyKordo

Mitglied
Hab das jetzt mit der map gemacht nur wenn ich das ausgeben will sagt der mit das die arraylist leer ist

gemeint ist z.B. excel.B_Tage.get(i);

Java:
	public static LinkedHashMap<String, Inhalt> kw_selektieren(Inhalt excel) {
		int i = 0, j = 0;
		LinkedHashMap<String, Inhalt> map = new LinkedHashMap<>();
		Inhalt excel1 = new Inhalt();
		while (i < excel.KW.size()-1) {

			
			j = 0;

			while (excel.KW.get(i).equals(excel.KW.get(i + 1))) {

				excel1.B_Tage.set(j, excel.B_Tage.get(i));
				excel1.Bemerkung.set(j, excel.Bemerkung.get(i));
				excel1.Berechner.set(j, excel.Berechner.get(i));
				excel1.Stunden.set(j, excel.Stunden.get(i));
				excel1.ColA.set(j, excel.ColA.get(i));
				excel1.ColB.set(i, excel.ColB.get(i));
				excel1.ColC.set(j, excel.ColC.get(i));
				excel1.ColG.set(j, excel.ColG.get(i));
				excel1.ColH.set(j, excel.ColH.get(i));
				excel1.ColI.set(j, excel.ColI.get(i));
				excel1.Datum.set(j, excel.Datum.get(i));
				excel1.KW.set(j, excel.KW.get(i));
				excel1.Leistung.set(j, excel.Leistung.get(i));
				excel1.V_Tage.set(j, excel.V_Tage.get(i));
				excel1.Wochentag.set(j, excel.Wochentag.get(i));

				j++;

			}

			map.put(excel.KW.get(i), excel1);
		}

		return map;
 
S

SlaterB

Gast
recht abenteuerlicher Code,
wann soll die while-Schleife aus Zeile 12, falls sie einmal drankommt, je enden?
du machst zwar durchaus etwas in der Schleife, nämlich die anscheinend vielen einzelnen Listen alle mit denselben Werten zu planieren,
aber davon wird das equals ja nicht schlechter, wird bei true bleiben

dass du überhaupt je NACH der Methode drankommst läßt vermuten, dass diese innere Schleife nicht durchlaufen wird,
allerdings steht das put() für die Map gar nicht drin, schade, wäre gute Erklärung ;)

wo greifst du auf die Map zu? gib dort die size() aus, evtl. das KeySet, welche String-Keys sind vorhanden?

alle Keys in der Map verweisen übrigens auf ein und dasselbe Inhalt-Objekt
(edit: ok, das wird ja auch gefunden, dachte schon das Map-Result kommt nicht)

----

zu den vielen Einzellisten nochmal:
das ist ein klassisches Fehlkonstrukt, viel lieber nur eine Liste, welche Objekte enthält, darin dann Attribute wie datum, leistung usw.

Attribute auch klein schreiben!

ach, es wäre so viel zu korrigieren
 
S

SlaterB

Gast
siehe auch mein Posting,
noch zur Ergänzung was dir zuvor vorgeschlagen wurde:
kein equals-Vergleich,
nimm das KW von jedem i, such danach in der Map nach dem neuen Inhalt-Objekt oder lege eins an,
in dieses neue Inhalt-Objekt dann die Daten übernehmen, eher add() als set() auf die Einzellisten,
welche aber ja sowieso keine so tolle Idee sind
 

EddyKordo

Mitglied
hier greif ich auf die map zu

Java:
LinkedHashMap<String,Inhalt> map = new LinkedHashMap<>();
					map = Excel_1.kw_selektieren(nexcel);
					
					Iterator iterator = map.values().iterator();
					
					while( iterator.hasNext())
					{
						Excel_1.export((Inhalt)iterator.next(),benutzer.getVname(),benutzer.getNname() );
					}

die while schleife ist nach dem return map geschlossen
 
Zuletzt bearbeitet:

ARadauer

Top Contributor
im Grunde funktioniert eine Liste von Dingen in einer Map anahnd eines Keys speichern ungefähr so...

Java:
 public void addElementToList(HashMap<String, List<String>> map, String key, String element){
        List<String> list = map.get(key);
        if(list == null){
            list = new ArrayList<String>();
            map.put(key, list);
        }
        list.add(element);
    }
versuchd das mal zu vestehen..
 
S

SlaterB

Gast
> hier greif ich auf die map zu

jaja, ok, der Punkt war schon geklärt,
die Liste wird gefunden, ist nur eben leer

Rest siehe weitere Anteile in den Postings,

bzw. nochmal was anderes: stelle in deinen Worten dar, was eigentlich passieren soll,
arbeite nicht gleich die ganze Schleife ab, sondern nur ein Element, i=0,
was soll danach vorliegen? was genau müsste in der Map sein, und prüfe ob erfolgreich,

inwiefern wird dafür ein equals benötigt falls du das nicht schon ersatzlos wieder gestrichen hast?
 

EddyKordo

Mitglied
zu den vielen Einzellisten nochmal:
das ist ein klassisches Fehlkonstrukt, viel lieber nur eine Liste, welche Objekte enthält, darin dann Attribute wie datum, leistung usw.

sollen die Attribute dann als listen genommen werden oder als einfache arrays ?


ist das so richtig wenn ich nur eine liste habe und ich adde dann nur die objekte ?

list.add(Datum); zum beispiel ?
 
S

SlaterB

Gast
wenn du nur 10 Datums hast dann kommen die in eine Liste oder auch nicht,

(hier quasi reine Wiederholung des vorherigen, aber du zwingst mich ja dazu durch die simple Frage: )
wenn du aber 10x 5 Dinge hast, dann nicht in 5 Listen, sondern die 5 in ein Objekt als Attribut, String, int, Date, was auch immer,
und die 5 dann in eine Liste

stell dir vor du hast ein Kochbuch mit 10 Rezepte, jeweils mit Mengenangaben, Kochzeit, Kosten, Datum der Erfindung, Kalorien,

schreibst du nun ein Kochbuch mit 5 Seiten,
auf Seite 1 stehen untereinander die Mengenangaben aller Rezepte, auf Seite 2 die 10 Kochzeiten usw.,
- oder hast du 10 Seiten, auf jeder ein komplettes Rezept mit allen jeweils zugehörigen Informationen?

die Probleme kann man sich leicht denken, falsche Indexe, fehlendes Element welches alles verrutscht,
allein schon komplizierte Schreibweise usw.
 

Neue Themen


Oben