2013-08-16 2 views
-5

Я хочу создать массив строк из Hashmap В java?Создайте массив из HashMap в Java

Мой 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"}; 

Edit:

отношения между входом и из положить. Если значение ключа 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 .Please помощи, как я мог это сделать .THANKS

+4

Хорошо, что вы пробовали? –

+1

Начните с 'for (String key: param.keys()) {...}' и посмотрите, где это займет вас ... – MadProgrammer

+1

Зачем вам это нужно? Скорее всего, вы можете избежать необходимости создавать этот массив вообще, если это не домашнее задание. –

ответ

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++; 
     } 
    } 
+0

Посмотрите, если значение A равно 2, то в массиве оно будет похоже на A 1, A 2 и так далее. Если A равно 3, тогда A 1, A 2, A 3, как и для каждого ключа, который у меня есть в HashMAp – Developer

+1

@Gaurav проверяет мое решение. Ваш вопрос не объясняет этого. теперь я получил вашу мысль. Я буду голосовать за возобновление этого вопроса. Лучше использовать 'List', чем' array' –

+0

, фактически мне нужно вернуть массив, который я опубликовал в вопросе. Потому что я должен заполнить это в списке в android. Пожалуйста, предложите, как я могу это сделать. – Developer

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.

+0

Я хочу, чтобы результат был как String [] list = {"A 1", "A 2", "B 1", "B 2", "B 3", "C 1", "C 2" }; – Developer

+1

@Gaurav скажите мне, что такое отношения с вводом и выводом? –

0

Базовый алгоритм должен быть:

Для каждого ключа в карте (используйте param.entrySet())
Iterate value количество раз и нажмите в массив/список.

Смежные вопросы