【问题标题】:How to split a string into a map with a list of values?如何将字符串拆分为带有值列表的映射?
【发布时间】:2016-04-20 10:16:30
【问题描述】:

我的应用程序有点卡住了,我不太确定要搜索什么。所以我希望这里有人可以帮助我。

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

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

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

我怎样才能做到这一点?提前感谢您的帮助。

【问题讨论】:

  • 输入是一个List?
  • 是的,我的输入是List<String>

标签: java list dictionary


【解决方案1】:

只需使用 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]);
}

【讨论】:

  • 太棒了!非常感谢! :)
【解决方案2】:

你可以试试这个,使用hashmap,以(space)作为分隔符存储连续的字符串,最后在你想要的时候将字符串拆分为列表

//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[] 将有你的阵列,干杯!

【讨论】:

  • 您在 for-each 循环声明中缺少对象类型
【解决方案3】:
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));
}

完整的工作解决方案。

【讨论】:

    猜你喜欢
    • 2012-01-17
    • 2016-12-10
    • 2021-12-18
    • 2021-08-15
    • 2017-09-22
    • 2019-08-21
    相关资源
    最近更新 更多