2016-12-20 1 views
0

Ich möchte Werte zu einem Set hinzufügen, das ein Wert in Map ist. dh. Map <String,HashSet<String>> .. mein Code:Funktion in List/Set hinzufügen zeigt booleschen Wert

fieldMap = new LinkedHashMap<String, HashSet<String>>(); 

    if(fieldMap.get(qName)!=null){ 
            HashSet<String> tempSet = fieldMap.get(qName); 
            tempSet.add(//String); 
            fieldMap.put(qName, tempSet);} 

hier wollte ich Werte setzen direkt wie: fieldMap.put(qName,fieldMap.get(qName).add(//String)) .. So kann ich die über drei Zeilen in der Schleife ersetzen. Aber wenn ich 'add' Funktion geben, kommt Fehlermeldung wie: "The method put(String, HashSet<String>) in der Art HashMap<String,HashSet<String>> ist nicht anwendbar für die Argumente (String, boolean)". Kann jemand erklären, warum dieser Fehler kommt. Auch müssen wir dies Schritt für Schritt durchführen?

Antwort

1

Das Problem ist, dass Set.add einen Boolean, nicht die Menge zurückgibt. Der boolesche Rückgabewert sagt Ihnen, ob der Wert zur Menge hinzugefügt wurde. Sie versuchen also, der Karte einen booleschen Wert als Wert hinzuzufügen.

Es ist jedoch nicht notwendig, den Satz wieder in die Karte einzufügen. Sie können nur die Menge erhalten und den neuen Wert, um es hinzuzufügen:

if (fieldMap.containsKey(qName)) 
    fieldMap.get(qName).add(value); 
+0

fieldMap.get (qName) .add (Wert); Diese Zeile zeigt nur den oben angegebenen Fehler – Kaira

+0

Sorry, das ist nicht möglich. Der Fehler ist "Die Methode put (String, HashSet) im Typ HashMap> ist nicht anwendbar für die Argumente (String, boolean)". In der von mir gelieferten Anweisung gibt es keine Put-Methode, so dass sie diesen Fehler möglicherweise nicht geben kann. – sprinter

+0

das ist nur richtig ..! Vielen Dank.. – Kaira

1

Dies ist, was die neue Java 8 Verfahren in Map<K,V> speziell für ausgelegt ist:

V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction) 

In Ihrem Fall

fieldMap.computeIfAbsent(qName, k->new HashSet<>()).add(someString); 

computeIfAbsent prüft auf die Existenz von qName. Wenn es nicht existiert, wird die "Mapping-Funktion" (new HashSet<>()) aufgerufen und das Ergebnis zu Map hinzugefügt. Dann wird der Wert (entweder der vorhandene oder der neu hinzugefügte) zurückgegeben, und Sie beenden, indem Sie add() auf HashSet aufrufen.

Verwandte Themen