Collections Map in Map-Problem

GianaSisters

Bekanntes Mitglied
Hallo Zusammen,

ich habe folgendes Problem:
Eine Map-Collection:

Java:
Map<String, Map<String, String>> test= new LinkedHashMap<String,Map<String, String>>();
soll erzeugt werden.

Also habe ich eine weitere Map angelegt:
Java:
private Map<String, String> testklein = new LinkedHashMap<String, String>();

Das Problem was ich habe ist nun die Daten richtig reinzubekommen. Es gibt halt eine Übervariable wie "Fleisch, Brot, Gemüse" die als erster String gegeben werden soll.
Die zweite Map<String,String> beinhaltet verschiedene Faktoren wie ID, Gewicht, Größe.

Nun habe ich die so miteinander verbunden.
Java:
testklein.put(key, value);
test.put(partName, testklein);

bei jedem Durchlauf wird nun reingeschrieben mit dem Problem, dass sich testklein ja immer ändert. Wenn ich beim Fleisch bin schreibt er noch alle fleischdaten rein, aber die testklein Liste verändert sich ständig so das ich das nicht richtig zuordnen kann. bei einem testklein.clear() sind alle Daten weg und dann auch in der test-Liste. Wie kann ich das am besten Handhaben ?
Bitte nicht auf andere Collections verweisen, es muss darüber geschehen.
Vielen dank schonmal,

Giana
 
auf andere Collections verweist du schon selber, sortiere doch erstmal in deinem Text und vielleicht Code,
was du alles als 'Map' und was als 'Liste' bezeichnen möchtest, Liste taucht zweimal in deinem Text auf..

desweiteren ist unklar warum sich deine Daten 'ja immer ändern' (falls du nicht dein eigenes Einfügen meinst)
und inwiefern das ein Problem ist, was du dir unter einer Lösung vorstellst,

Beispiele Beispiele Beispiele, und die Welt wäre so viel runder
was kommt bei 'Fleisch' in 'testklein' hinein,
"BicMac" -> "schmeckt"
"Whopper" -> "schmeckt auch"
?
und diese Map testklein mit zwei Einträgen wird dann in der Ober-Map test unter "Fleisch" abgelegt?

was kommt danach dran, neue Kategorie "Gemüse"? das wird wohl ein neuer Eintrag in der Ober-Map test (bessere Variablennamen wären auch toll..)?
dann brauchst du sicher eine neue zweite Unter-Map, willst nicht in der ersten mit den Fleisch-Einträgen weiter schreiben,
geht es darum? das kann man auch anders formulieren..

erstelle entweder direkt eine neue Map (nicht die erste clearen() ) oder schaue besser auch erstmal nach ob in der Ober-Map unter dem Key schon eine Unter-Map vorhanden ist usw.
 
Danke SlaterB, leider verstehen wir uns hier nicht gegenseitig.
Das Beispiel mit dem Fleisch und Gemüse habe ich einfachhaltshalber als Beispiel genommen damit es besser verständlich sein sollte.

Also Grundlegend: Es wird eine INI-Datei geladen in die so Beispielsweise aussieht:

[Fleisch]
Fleisch-1.id=5
Fleisch-1.gewicht=1.3
Fleisch-2.id=6
Fleisch-2.gewicht=1.4


[Brot]
Brot-1.id=1100

usw...
Am Ende soll nun halt alles in
Java:
private Map<String, Map<String, String>> result = new LinkedHashMap<String,Map<String, String>>();
stehen

Nun habe ich programmiert, das alles Zeile für Zeile eingelesen wird und auch erkannt und ich ein Abbild habe, so das ich am ende der while(...readline())-Schleife alle 3 Werte habe: "Abschnitt, Key und Value".
Und genau diese Werte möchte ich gerne in besagtes result haben.
Also das es später so aussieht:
{Fleisch={Fleisch-1.id=5, Fleisch-1.gewicht=1.3...}, Brot={Brot-1.id=1100,...}}

Schreibe ich am Ende der While-Schleife
Java:
unterliste.put(key, value);
result.put(partName, keyAndValue);

So habe ich in Brot natürlich auch die Fleisch-Sachen was nicht gewünscht ist. Lösche ich nach jedem Abschnitt die Unterliste habe ich in Fleisch und Brot nurnoch das letzte aus der Datei, genauer: die Einträge der letzten Unterliste. Ich hoffe Du verstehst mein Problem, ich würde gerne den Abschnitt und den Key mit dem Wert schön nach und nach eintragen. Aber durch die Verschachtelung ändert sich ständig die Unterliste wodruch das alles nicht möglich ist. Ich hatte die Idee, vielleicht nach jeder Abschnittserkennung die Map zu kopieren und diese dann einzufügen. Was aber auch nicht funktionierte. Sorry, dass ich in meinem ersten Post von Liste gesprochen habe, eigentlich meinte ich die Map... Ich hoffe Du kannst mit der Schilderung etwas mehr anfangen und mir sogar helfen !🙂
Viele Grüße,
Giana
 
hmm, ich denke da habe ich dich schon ganz gut verstanden 😉
jetzt noch deutlicher:

verwende keine feste unterliste, welches für eine Map schon wieder ein ungünstiger Variablenname ist,

arbeite so:

Java:
große Schleife {

  // Eintrag in drei Teile zerlegen

  Map unterMap = oberMap.get(abschnitt);
  if (unterMap == null) {
     unterMap = neue Map erzeugen;
     oberMap.put(abschnitt, unterMap);
  }

  // hier nun in korrekter unterMap 'Key und Value' eintragen
}

die 5 Zeilen in der Mitte verwende ich relativ häufig, kannst du dir merken,
damit funktioniert es auch wenn völlig durcheinander mehrmals zwischen bekannten Abschnitten gewechselt und zurückgekehrt werden würde,
jeder Schleifendurchlauf arbeitet für sich korrekt von anderen unabhängig
 
Du brauchst eine Ober-Map und für jeweils jede Kategorie eine eigene Unter-Map. Du kannst die Unter-Map nicht wiederverwenden, weil Du Dir sonst bereits gespeicherte Werte überschreibst/löschst bzw. in der falschen Unter-Map Werte hinzufügst, die da nicht rein sollen. Das stand auch in SlaterB's erster Antwort schon (vielleicht nicht verständlich genug).
 

Zurück
Oben