2015-10-10 58 views
-2

,我發現了錯誤錯誤添加值時,地圖<字符串,ArrayList的<String>>

error: incompatible types: String cannot be converted to ArrayList<String> 
     crazyMap.put(company, day); 

當我運行這段代碼

Map<String, ArrayList<String>> crazyMap = new HashMap<String, ArrayList<String>>(); 
String company = "myCompany"; 
String day = "Monday"; 
crazyMap.put(company, day); 

我怎麼能去格式化「天'參數來滿足類型錯誤?

+1

創建一個ArrayList,將字符串添加到它,將列表添加到地圖。 –

回答

0

您的數據結構的目標是什麼?

crazyMap應該存儲一個映射到一天的公司,就像您試圖添加上面那樣?如果是這樣,請嘗試:

Map<String, String> crazyMap = new HashMap<String, String>(); 
String company = "myCompany"; 
String day = "Monday"; 
crazyMap.put(company, day); 

或者您想讓crazyMap擁有一家映射多天的公司嗎?事情是這樣的:

Map<String, Collection<String>> crazyMap = new HashMap<String, Collection<String>>(); 
Collection<String> days = new ArrayList<String>(); 
days.add("Monday"); 
crazyMap.put("myCompany", days); 
0

而是與ArrayList自己的煩心事,我會建議使用一個已經存在的類型與設計用於多值:Guavas Multimap之(explanation; JavaDoc)。

而不是做這個的:

Map<String, ArrayList<String>> crazyMap = new HashMap<>(); 
crazyMap.put("myCompany", new ArrayList<>(Arrays.asList("Monday"))); 

你可以這樣做:

Multimap<String, String> crazyMap = ArrayListMultimap.create(); 
crazyMap.put("myCompany", "Monday"); 

這也避免了像醜陋的東西:

ArrayList<String> items; 
if (crazyMap.containsKey("myCompany")) { 
    items = crazyMap.get("myCompany"); 
} else { 
    items = new ArrayList<>(); 
} 
items.add("Tuesday"); 
crazyMap.put("myCompany", items); 

番石榴在乎你創建集合,如果它不存在。請致電:

crazyMap.put("myCompany", "Tuesday"); 

並且一切都完成了。

一個缺點是,使用的接口是MultiMap,它不延伸Map。這意味着你要 「弱化」 變量類型MultiMap,如:

public void someMethod(MultiMap<K, V> multimap) 

代替:

public void someMethod(Map<K, Collection<V>> multiMap) 

瞭解更多關於這裏的區別:"Multimap Is Not A Map"


你可以在maven repository找到最新版本的番石榴。

相關問題