2017-03-28 8 views
-2

In C++ kann ich tun:java Einsatz in Map <String, Set <String>>

map<string, set<string>> v; 
v["AHA"].insert("BA"); 

in Java Ich habe:

HashMap<String, Set<String>> v = new HashMap<String, Set<String>>(); 

Wie ich "BA" v einfügen [ "AHA "] so manche wie C++?

Ja ich versuche dies:

Set<String> vs = V.get("B"); 
if (vs == null) vs = new HashSet<String>(); 
vs.add("V"); 
V.put("B", vs); 

aber groß

+4

'v.get ("AHA") hinzufügen ("BA")' Siehe [ 'Karte .get() '] (https://docs.oracle.com/javase/8/docs/api/java/util/Map.html#get-java.lang.Object-) und [' Set.add() '] (https://docs.oracle.com/javase/8/docs/api/java/util/Set.html#add-java.lang.Object-) – khelwood

+0

@khelwood, aber wenn v.get (" AHA ") ist null es ist nicht funktionieren, ich sollte nur immer überprüfen, ob (v.get (" AHA ​​")! = null)? –

Antwort

5

Wenn Sie etwas in die Gruppe hinzufügen möchten, und die Möglichkeit zulassen, dass der Schlüssel/Wert-Paar möglicherweise noch nicht in der Karte vorhanden sind, können Sie verwenden computeIfAbsent

v.computeIfAbsent("AHA", k -> new HashSet<String>()).add("BA") 

Dies wird der Schlüssel nachschlagen in der Karte, und wenn es fehlt, fügen Sie es mit einem neuen leeren Satz als Wert hinzu, so dass Sie dann Sachen direkt hinein fügen können.

Wenn Sie eine Version von Java vor Java 8 verwenden, ist es ein wenig mehr Code.

Set<String> s = v.get("AHA"); 
if (s==null) { 
    s = new HashSet<String>(); 
    v.put("AHA", s); 
} 
s.add("BA"); 
+0

Danke. Dies ist die beste Antwort, das ist was ich gesucht habe !!! –

0
HashMap<String, Set<String>> v = new HashMap<String, Set<String>>(); 
Set<String> set = new HashSet<String>(); 
set.add("some data"); 
v.put("AHA",set); 

ein Set erstellen erste und speichern sie dann in der Karte.

+0

Ich kann hinzufügen in Satz, der bereits existiert. In C++ kann ich v ["AHA"] einfügen. Einfügen ("BA"); v ["AHA"]. einfügen ("BF"); usw. einige Male. In Java kann ich es nicht tun, ohne auf NULL zu prüfen? –

Verwandte Themen