如何将字符串拆分为带有值列表的地图?

时间:2016-04-20 10:16:30

标签: java list dictionary

我的应用程序有点困难,我不太清楚要搜索什么。所以我希望有人可以帮助我。

我有一个String的列表,如下所示:

Cake;carrot
Cake;apple
Cake;spicy
Pizza;pepperoni
Pizza;mozzarella

......等等。我想将此数据放入Map<String, List<String>>,其中CakePizza将构成我Map中的密钥。将[carrot, apple, spicy]作为Cake的值,将[pepperoni, mozzarella]作为Pizza的值。

我怎么能实现这个目标?提前感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

使用String.split()

迭代您的列表
ArrayList<String> myList;
HashMap<String, List<String>> myMap = new HashMap<>();
for(String s : myList)
{
   String[] split = s.split(";");
   List<String> bucket = myMap.get(split[0]);
   if(bucket == null) 
   {
       bucket = new ArrayList<String>();
       myMap.put(split[0], bucket);
   }

   bucket.add(split[1]);
}

答案 1 :(得分:0)

你可以尝试这个,使用一个hashmap,用(空格)存储连续的字符串作为分隔符,最后在你希望它作为列表时分割字符串

//Assuming your list to be the variable 'list'
HashMap<String,String> hm = new HashMap<>();
for(val : list){
    String st[] = val.split(";");
    if(hm.get(st[0])==null){
        hm.put(st[0],st[1]);
    }
    else{
        hm.put(st[0],hm.get(st[0])+" "+st[1]);
    }
}

当你想要那个字符串数组pizza

String pizz[] = (hm.get("pizza")).split(" ");

pizz[]会有你的阵容,欢呼!

答案 2 :(得分:0)

public static void main(String[] args) {
    List<String> data = new ArrayList<String>();
    Map<String, List<String>> finalData = new HashMap<String,List<String>>();
    data.add("Cake;carrot");
    data.add("Cake;apple");
    data.add("Cake;spicy");
    data.add("Pizza;pepperoni");
    data.add("Pizza;mozzarella");
    for (String dataString : data) {
        List<String> temp = null;
        if (finalData.get(dataString.split(";")[0]) == null) {
            temp = new ArrayList<String>();
            temp.add(dataString.split(";")[1]);
            finalData.put(dataString.split(";")[0], temp);
        } else {
            temp = finalData.get(dataString.split(";")[0]);
            temp.add(dataString.split(";")[1]);
            finalData.put(dataString.split(";")[0], temp);
        }
    }
    System.out.println(new Gson().toJson(finalData));
}

完整的工作解决方案。