Collections Werte aus einer HashMap auslesen, oder gehts auch einfacher ?

tantor

Neues Mitglied
Hallo zusammen,

ich habe eine Liste in der steht ein Artikel, eine Einheit und ein zugehöriger Preis.
Dies habe ich wie folgt realisiert :
Java:
final ArrayList<HashMap<String,String>> preisliste = new ArrayList<HashMap<String,String>>();
        HashMap<String,String> temp = new HashMap<String,String>();
        temp.put("artikel","Bananen");
        temp.put("preis", "2.00");
        temp.put("einheit", "kg");
        preisliste.add(temp);
        HashMap<String,String> temp1 = new HashMap<String,String>();
        temp1.put("artikel","Brötchen");
        temp1.put("preis", "0.10");
        temp1.put("einheit", "Stück");
        preisliste.add(temp1);
        HashMap<String,String> temp2 = new HashMap<String,String>();
        temp2.put("artikel","Limonade");
        temp2.put("preis", "1.59");
        temp2.put("einheit", "Flasche(n)");
        preisliste.add(temp2);
        HashMap<String,String> temp3 = new HashMap<String,String>();
        temp3.put("artikel","Apfel");
        temp3.put("preis", "1.49");
        temp3.put("einheit", "kg");
        preisliste.add(temp3);
        HashMap<String,String> temp4 = new HashMap<String,String>();
        temp4.put("artikel","Chips");
        temp4.put("preis", "0.99");
        temp4.put("einheit", "Stück");
        preisliste.add(temp4);

so und nun habe ich in zwei Variablen jeweils einen Artrikel und eine Einheit.

Ich möchte jetzt gerne in der oberen Liste suchen, od die Kombination aus Artikel und Einheit
in der Liste vorhanden ist, und wenn ja, dann mir den dazugehörigen Preis anzeigen lassen.

Ich weiß aber nicht wie ?

Könnt Ihr mir da vielleicht bitte helfen...

Also nochmal wie folgt:
ich würde z.B. die Kombination "Chips"/"Stück" ind er Map oben suchen, und wenn es diese Kombi in der Liste gibt, sollte ich den Wer 0.99 zurückgeliefert bekommen.

Danke
 
Java:
final ArrayList<HashMap<String,String>> preisliste = new ArrayList<HashMap<String,String>>();
😱

Da hat Volvagia vollkommen recht. Ich kann dir "Java ist auch nur eine Insel" empfehlen.
Da kannst du einzelne Themen auch gut durcharbeiten.
Galileo Computing :: Java ist auch eine Insel –

Achso, durch kannst durch HashMaps iterieren. Ließ mal den Abschnitt zu HashMaps in der Quelle von mir nach.
 
bei der konzeption wirst du imho kaum eine andere wahl haben, als über die arraylist zu iterieren und jeden value von "artikel" und "einheit" mit deiner kombination zu vergleichen und dir dann bei übereinstimmung den "preis" zu holen.
wenn du mich fragst ist das aber keine lösung über dessen auführung man auch nur 2 sekunden nachdenken braucht 😉.

Ich würde dir erstmal eine Klasse empfehlen, die einen Artikel abbildet. danach musst du dir gedanken machen, wie du nach deinen Artikeln suchen möchtest und das dann als key implementieren. am einfachsten wäre das natürlich dann eine
Code:
HashMap<String, Artikel>
womit du dann durch
Code:
.get("ChipsStk")
den Artikel holen kannst. Besser natürlich den key auch in einer eigenen Klasse abzubilden, wodurch du sämtliche Kombinationen suchen kannst (wobei ich dir für den anfang das erste empfehlen würde 😉).
 
Sagte ich doch. Statt der HashMap schreib eine Klasse wie z. B. Article. Gut, meine Antwort war nicht SO hilfreich, da HashMaps ja auch Objekte sind, aber was solls. ^^

Und dann eben so:

Java:
int getPriceIfPiecesOnStock(String articleName, int pieces)
{
	synchronized(preisliste)
	{
		for(Article a:preisliste)
		{
			if(a.hasArticleName(articleName) && a.hasPiecesOnStock(pieces))
				return(a.getPrice());
		}
	}
	return(-1);
}

(VHidT)

Stattdessen kannst du natürlich auch den Namen in einer Map mit den Artikel verknüpfen.
 
Da bleibt dir nichts anderes übrig als durch die ArrayList zu iterieren und zu vergleichen.

Aber das sieht fa fürchterlich kompliziert aus und ich würde auch einmal darüber nachdenken ob String für einen Preis die richtig Datenstruktur ist.

Ich würde da eher eine Klasse schaffen die Bezeichnung, Preis und Einheit beinhaltet und Comparable implementiert. Dann ist wenigstens der Vergleich einfacher.

(EDIT: Na siehste 🙂 während dem ich tippte kam derselbe Vorschlag schon von anderer Seite)

Weniger wichtig aber auch eine Überlegung wert:
Als Typ für "Einheit" bietet sich übrigens ein Enum an - na ja, für die Bezeichung möglicherweise auch, stellt dir vor einer hat "Banane" und der andere "Bananen" eingegeben und schon ist es nicht dasselbe.
 

Zurück
Oben