2010-02-15 15 views

risposta

8
HashMap map = new HashMap(); 
Object[][] arr = new Object[map.size()][2]; 
Set entries = map.entrySet(); 
Iterator entriesIterator = entries.iterator(); 

int i = 0; 
while(entriesIterator.hasNext()){ 

    Map.Entry mapping = (Map.Entry) entriesIterator.next(); 

    arr[i][0] = mapping.getKey(); 
    arr[i][1] = mapping.getValue(); 

    i++; 
} 
+0

Possiamo creare un oneliner ora abbiamo flussi? –

5

Questo può essere fatto solo quando i tipi di chiave e valore sono uguali.

Data:

HashMap<String,String> map; 

posso creare un allineamento da questa mappa con questo semplice ciclo:

String[][] array = new String[map.size()][2]; 
int count = 0; 
for(Map.Entry<String,String> entry : map.entrySet()){ 
    array[count][0] = entry.getKey(); 
    array[count][1] = entry.getValue(); 
    count++; 
} 
-1

iterare la mappa con la entrySet, e riempire il vostro record di array con l'oggetto Entry

3

Che dire di

Object[][] array = new Object[][]{map.keySet.toArray(), map.entrySet.toArray()}; 

O, per essere più preciso circa i tipi, diciamo che sono Strings: Set s' toArray prende un argomento suggerimento, in modo che

String[][] array = new String[][]{map.keySet.toArray(new String[0]), map.entrySet.toArray(new String[0])}; 

Edit: Ho appena realizzato un paio di giorni più tardi che mentre questo può funzionare per caso, in generale non dovrebbe. Il motivo è l'intermedio Set; anche se è "supportato dalla mappa", non sembra esserci alcuna garanzia esplicita che verrà iterato in un ordine particolare. Pertanto, gli array di chiavi e di entrata potrebbero non essere nello stesso ordine, il che è sicuramente un disastro!