Java 我在HashMap中使用HashMap,但我还需要使用ArrayList作为值。I';我很难给出价值

Java 我在HashMap中使用HashMap,但我还需要使用ArrayList作为值。I';我很难给出价值,java,arraylist,hashmap,Java,Arraylist,Hashmap,我在HashMap中使用HashMap,但我还需要使用ArrayList作为值。我很难给出价值 private HashMap<String, HashMap<String, ArrayList<String>>> languages_hashmap = new HashMap<String, HashMap<String, ArrayList<String>>>(); public void addvalue (Stri

我在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);

}
private HashMap languages_HashMap=new HashMap();
public void addvalue(字符串语言、字符串代码、字符串值、布尔值)
{
HashMap dictionary=languages\u HashMap.get(语言);
if(dictionary==null)
{
dictionary=newhashmap();
}
dictionary.put(代码、值);
语言\u hashmap.put(代码、字典);
}
public void addvalue(字符串语言、字符串代码、字符串值、布尔值)
{
HashMap dictionary=languages\u HashMap.get(语言);
if(dictionary==null)
{
dictionary=newhashmap();
语言\u hashmap.put(代码、字典);
}
List=dictionary.get(代码);
if(list==null){
列表=新的ArrayList();
字典。put(代码、列表);
}
列表。添加(值);
}

您的代码不可编译<代码>字典.put(代码,值)

需要
ArrayList
,您正在传递
String

ArrayList<String> list = new ArrayList<>(value);
dictionary.put (code, list);
ArrayList list=新的ArrayList(值);
dictionary.put(代码、列表);

值的类型参数是字符串,它应该是ArrayList,因为字典变量是HashMap字典的类型

    dictionary.put (code, value);
其中,代码为字符串,应为ArrayList类型

public void addvalue (String language, String code , ArrayList<String> value, boolean isStringArray)
public void addvalue(字符串语言、字符串代码、ArrayList值、布尔ISSTRINGRAY)
若要将值作为字符串参数传递给addvalue函数,请在函数中创建ArrayList,并向其添加值,然后传递给dictionary

     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);

  }
private HashMaplanguages_hashmap=new hashmap();
ArrayList tempValue=新建ArrayList();
public void addvalue(字符串语言、字符串代码、字符串值、,
布尔值(Y)
{
临时价值。增加(“价值”);
HashMap dictionary=languages\u HashMap.get(语言);
if(dictionary==null)
{
dictionary=newhashmap();
}
dictionary.put(代码、临时值);
语言\u hashmap.put(代码、字典);
}

正如其他人提到的,您不能将字符串传递给ArrayList

public void addvalue (String language, String code , ArrayList<String> value, boolean isStringArray)
在方法签名中将值的类型更改为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);

}
private HashMap languages_HashMap=new HashMap();
public void addvalue(字符串语言、字符串代码、ArrayList值、布尔ISSTRINGRAY)
{
HashMap dictionary=languages\u HashMap.get(语言);
if(dictionary==null)
{
dictionary=newhashmap();
}
dictionary.put(代码、值);
语言\u hashmap.put(代码、字典);
}

或者将字符串的ArrayList传递给它。

首先,在您的生活中需要对象,嵌套这么多地图和集合是一种代码味道

代码中有两个不同的概念:

  • 字典
    为每个
    代码保存
  • 另一种将
    词典
    与语言相关联的东西。我会叫它
    译者
    ,但你可能会找到一个更合适的名字
分离责任将使您的代码更具可读性,并允许您分别测试每个案例:

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);
    }

}
公共类转换器{
//尽可能引用接口而不是具体类型
//(即使用Map而不是HashMap)
私有映射字典=新HashMap();
public void addValue(字符串lang、字符串代码、字符串值){
dictionaries.get(lang).add(code,value);
}
公共列表getValue(字符串lang、字符串代码){
返回字典.get(lang).get(代码);
}
公共void addDictionary(字符串lang,Dictionary){
字典。放(朗,字典);
}
}
公共类词典{
//这里也一样,使用诸如List或Map之类的接口,而不是它们的实现
映射值=新的HashMap();
公共void添加(字符串代码、字符串值){
列表=value.get(代码);
//如果此代码没有以前的值,
//创建一个新的值列表
if(list==null){
列表=新的ArrayList();
值。put(代码、列表);
}
列表。添加(值);
}
公共列表获取(字符串代码){
返回值.get(代码);
}
}

well“value”必须是arraylist。。您想如何处理“value”字符串?是否要使用特定分隔符拆分字符串并将其添加到ArrayList,然后添加到字典?如果不是,那又怎样?你的代码是不可编译的<代码>字典.put(代码,值)
需要ArrayList,您正在传递字符串。为什么不创建一个bean而不是嵌套映射呢?这对于下一个阅读你的代码的人来说是很难理解的。这里的人需要清楚地了解你的问题,通过查看你的代码,很难理解你在代码中有什么问题,请与您的代码共享日志或错误详细信息。目前有人可以向我发送电子邮件=alkolluyuz345@hotmail.com