2016-12-20 64 views
0

我想將值添加到Set中,該Set是Map中的值。 即。 Map <String,HashSet<String>> .. 我的代碼是:List/Set中的add函數顯示布爾值

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

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

在這裏,我希望把值直接,如: fieldMap.put(qName,fieldMap.get(qName).add(//String)) ..所以我可以替換循環上述3條線。 但是,當我給'add'功能時,錯誤消息是這樣來的:「The method put(String, HashSet<String>)類型HashMap<String,HashSet<String>>不適用於參數(String, boolean)」。 任何人都可以解釋爲什麼這個錯誤即將到來。我們也必須一步一步地執行此操作嗎?

回答

1

問題是Set.add返回一個布爾值,而不是集合。布爾返回值告訴你該值是否已添加到集合中。所以你試圖將一個布爾值作爲一個值添加到地圖上。

但是,沒有必要繼續添加設置回地圖。你可以得到一組和新的價值添加到它:

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

fieldMap.get(qName).add(value);此行只顯示上述指定的錯誤 – Kaira

+0

抱歉,這是不可能的。錯誤是「The method put(String,HashSet)in type HashMap>不適用於參數(String,boolean)」。在我提供的陳述中沒有'put'方法,所以它不可能給出這個錯誤。 – sprinter

+0

只是正確的..!非常感謝你.. – Kaira

1

這是在Map<K,V>新的Java 8方法是專門爲:

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

在你的情況

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

computeIfAbsent檢查是否存在qName。如果不存在,則調用「映射函數」(new HashSet<>()),並將結果添加到Map。然後返回值(現有的或新添加的),並通過HashSet調用add()完成。