2016-07-30 12 views
0

Gibt es eine Möglichkeit, einen Wert (oder den Wert eines Schlüssels) nur dann einem Schlüssel hinzuzufügen, wenn eine Bedingung erfüllt ist?Wert zu Schlüssel nur mit Bedingung für hashmap hinzufügen

Ich meine, so etwas wie:

myHashMap.add(key, if(true){//add this value} else {//add a different value}); 
+1

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/if.html – user1803551

+0

@ user1803551 dies nicht meine Frage beantworten. –

+0

Oh, tut es. Es zeigt Ihnen alles, was Sie tun müssen, um zu erreichen, was Sie wollen. Es ist sogar viel detaillierter als die Antworten, die Sie bekommen haben. – user1803551

Antwort

4

Ja, verwenden if-else:

if (condition){ 
    myHashMap.put(key, value); 
} else { 
    myHashMap.put(key, otherValue); 
} 

Wenn Sie darauf bestehen, es auf machen kurzen Gebrauch der ternäre Operator (siehe Oracle tutorial, Die Bedingte Operatoren Teil):

myHashMap.put(key, condition ? value : otherValue); 
+0

Danke. Die zweite Lösung war, was ich suchte. –

+2

@hello_its_me Ja, es funktioniert für Sie; aber ziemlich schlechter Stil. Zumindest sollten Sie das Ding in eine separate Methode verpacken. Der Punkt schreibt nicht den ** kürzesten ** Code, der möglich ist; ein guter Programmierer zu sein, bedeutet, den meisten ** lesbaren ** Code zu schreiben. Und es geht darum, Konzepte zu lernen und zu verstehen ... – GhostCat

+0

@hello_its_me als Ghostcat erwähnt, sollten Sie vorsichtig sein, Code zu schreiben, der nie gelesen werden kann. –

1

Nicht gerade, würden Sie so etwas wie zu tun haben:

// Assuming a boolean value is returned 
if (myHashMap.get(key)) { 
    myHashMap.put(key, value); 
} else { 
    myHashMap.put(key, differentValue); 
} 
+0

' add' ist keine Methode von 'Map' – Dici

+1

Oh wow, hoppla! Fest. –

1

einfach auf Antwort des zu Reut heften, wenn Sie auf einem Wert bereits in der Karte arbeiten wollen, sind, gibt es Karte # berechnen ab 8 Java:

Map<String, String> example = new HashMap<>(); 
//pretending we have values... 
example.compute("My Key", (key, oldValue) -> oldValue == null ? "New" : "Read"); 
+0

Ja, ich habe den älteren Wert abgerufen und bearbeitet. Auf diese Weise nicht, sieht es besser aus. Vielen Dank! –