-5

我想在java中从Hashmap创建一个字符串数组?

我的HashMap是这样的

HashMap<String, String> param = new HashMap<String, String>();
                 param.put("A", "2");
                 param.put("B", "3");
                 param.put("C", "2");

我想创建一个这样的字符串数组

String[] list = {"A 1", "A 2","B 1","B 2","B 3","C 1","C 2"};

编辑:

输入与输出的关系。如果键 A 的值为 2,则输出应包含 A 1 和 A 2,同样,如果键 B 的值为 3,则输出应包含 B 1 B 2 B3,依此类推。

我所做的是

public class test {
    public static void main(String[] args) {
        HashMap<String, String> param = new HashMap<String, String>();
        param.put("A", "2");
        param.put("B", "3");
        param.put("C", "2");

        String[] list = new String[param.size()];
        int i = 0;
        int a= Integer.parseInt(param.get("A"));
        for (int j = 1;j<= a;j++) {
            list[i] = ("a" +j);
            System.out.println(list[i]);
            i++;

        }

    }

我是 Java 新手。请帮助我如何做到这一点。谢谢

4

3 回答 3

2

试试这个

    HashMap<String, String> param = new HashMap<String, String>();
    param.put("A", "2");
    param.put("B", "3");
    param.put("C", "2");

    String[] list = new String[7];// It is better to use List other than an array
    int i = 0;
    for (Map.Entry<String, String> entry : param.entrySet()) {
        int lim=Integer.parseInt(entry.getValue());
       for(int j=0;j<lim;j++){
          list[i]=entry.getKey()+" "+String.valueOf(j+1);
           i++;
       }
    }

如果你真的想在这里使用数组。您可以尝试以下方式

  HashMap<String, String> param = new HashMap<String, String>();
    param.put("A", "2");
    param.put("B", "3");
    param.put("C", "2");
    int sum=0;
    for (Map.Entry<String, String> entry : param.entrySet()) {
        sum+=Integer.parseInt(entry.getValue());
    }
    String[] list = new String[sum];
    int i = 0;
    for (Map.Entry<String, String> entry : param.entrySet()) {
        int lim=Integer.parseInt(entry.getValue());
       for(int j=0;j<lim;j++){
          list[i]=entry.getKey()+" "+String.valueOf(j+1);
           i++;
       }
    }
于 2013-08-16T07:47:30.483 回答
0

好的,类似于:

String[] list = new String[param.size()];
int i = 0;
for (Map.Entry<String, String> entry : param.entrySet()) {
    list[i] = entry.getKey() + " " + entry.getValue();
    ++i;
}
assert i == list.length;
Arrays.sort(list);

但是,我认为您想要一个Map<String, Set<Integer>>.


为什么不:

SortedSet<String> param;

void putParam(String key, String addableValue) {
    param.add(key + " " + addableValue);
}

putParam("A". "1");
putParam("B", "1");
putParam("A". "2");
putParam("B", "1");

String[] list = param.toArray(new String[param.size()]);
// [ "A 1", "A 2", "B 1" ]

对于泛型类型,toArray 需要 String 的数组对象。给该数组正确的大小,将重用该数组作为返回值,list

于 2013-08-16T07:35:48.620 回答
0

基本算法应该是:

对于地图中的每个键(使用 param.entrySet())
迭代value次数并推入数组/列表。

于 2013-08-16T07:36:41.967 回答