2017-04-07 47 views
2

我在HashMap中使用HashMap,但我也需要使用ArrayList作爲值。我無法給值我在HashMap中使用HashMap,但我也需要使用ArrayList作爲值。我無法給出值

private HashMap<String, HashMap<String, ArrayList<String>>> languages_hashmap = new HashMap<String, HashMap<String, ArrayList<String>>>(); 

public void addvalue (String language, String code , String value, boolean isStringArray) 
{ 

    HashMap<String,ArrayList<String>> dictionary = languages_hashmap.get(language); 
    if (dictionary == null) 
    { 
     dictionary = new HashMap<String,ArrayList<String>>(); 
    } 

    dictionary.put(code, value); 
    languages_hashmap.put(code, dictionary); 

} 
+0

以及「價值」必須是一個arraylist ..你想用「價值」字符串做什麼?你想用特定的分隔符分割字符串並將其添加到ArrayList然後添加到字典?如果不是那麼什麼? –

+1

您的代碼不可編譯。 'dictionary.put(code,value);'需要ArrayList ,並傳遞String。 – dosdebug

+4

爲什麼不創建一個bean而不是嵌套地圖?這對於下一個閱讀你的代碼的人來說很難理解。 – bphilipnyc

回答

0
public void addvalue (String language, String code , String value, boolean isStringArray) 
{ 

HashMap<String,ArrayList<String>> dictionary = languages_hashmap.get(language); 
if (dictionary == null) 
{ 
    dictionary = new HashMap<String,ArrayList<String>>(); 
    languages_hashmap.put(code, dictionary); 
} 

List<String> list = dictionary.get(code); 
if (list == null) { 
    list = new ArrayList<>(); 
    dictionary.put(code, list); 
} 
list.add(value); 
} 
0

你的代碼是不編譯。 dictionary.put(code, value);

需要ArrayList<String>,並且您正在通過String

類型的 參數是字符串
ArrayList<String> list = new ArrayList<>(value); 
dictionary.put (code, list); 
0

,它應該是ArrayList的<字符串>作爲字典變量是一種類型的HashMap <字符串,的ArrayList>字典

dictionary.put (code, value); 

其中代碼是字符串和應該是ArrayList類型

public void addvalue (String language, String code , ArrayList<String> value, boolean isStringArray) 

如果要將值作爲字符串參數傳遞給addvalue函數,則在函數中創建ArrayList < String>併爲其添加值,然後傳遞給字典。

 private HashMap<String, HashMap<String, ArrayList<String>>>languages_hashmap = new HashMap<String, HashMap<String, 
    ArrayList<String>>>(); 

    ArrayList<String> tempValue=new ArrayList<>(); 

    public void addvalue (String language, String code , String value, 
    boolean isStringArray) 
     { 
     tempValue.add("value"); 
     HashMap<String,ArrayList<String>> dictionary = languages_hashmap.get(language); 

     if (dictionary == null) 
     { 
      dictionary = new HashMap<String,ArrayList<String>>(); 
     } 

     dictionary.put(code, tempValue); 
     languages_hashmap.put(code, dictionary); 

    } 
+0

謝謝你的幫助 – Cinar12

0

正如其他人所提到的,你不能傳遞字符串ArrayList的

要麼改變的值類型ArrayList的方法中的簽名

private HashMap<String, HashMap<String, ArrayList<String>>> languages_hashmap = new HashMap<String, HashMap<String, ArrayList<String>>>(); 

public void addvalue(String language, String code , ArrayList<String> value, boolean isStringArray) 
{ 

    HashMap<String,ArrayList<String>> dictionary = languages_hashmap.get(language); 
    if (dictionary == null) 
    { 
     dictionary = new HashMap<String,ArrayList<String>>(); 
    } 

    dictionary.put(code, value); 
    languages_hashmap.put(code, dictionary); 

} 

否則傳遞字符串的ArrayList的吧。

+0

目前有人可以給我發電子郵件電子郵件= [email protected] – Cinar12

2

首先,你需要生活中的物體,嵌套如此多的地圖和集合是一種代碼味道。

有在你的代碼兩個不同的概念:

  • 一個Dictionary持有values每個code
  • 一個Dictionary到語言相關聯的另一件事情。我把它叫做Translator,但你或許應該尋找更適合的名稱

分離職責將使你的代碼更易讀,並允許您單獨測試每一種情況下:

public class Translator { 

    // Reference interface instead of concrete types whenever you can 
    // (i.e. use Map instead of HashMap) 
    private Map<String, Dictionary> dictionaries = new HashMap<>(); 

    public void addValue(String lang, String code, String value) { 
     dictionaries.get(lang).add(code, value); 
    } 

    public List<String> getValue(String lang, String code) { 
     return dictionaries.get(lang).get(code); 
    } 

    public void addDictionary(String lang, Dictionary dictionary) { 
     dictionaries.put(lang, dictionary); 
    } 

} 


public class Dictionary { 

    // Same here, use interfaces like List or Map instead of their implementations 
    Map<String, List<String>> values = new HashMap<>(); 

    public void add(String code, String value) { 
     List<String> list = values.get(code); 
     // if there is no previous value for this code, 
     // create a new list of values 
     if (list == null) { 
      list = new ArrayList<>(); 
      values.put(code, list); 
     } 
     list.add(value); 
    } 

    public List<String> get(String code) { 
     return values.get(code); 
    } 

} 
相關問題