2010-02-15 16 views

Respuesta

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

¿Podemos crear un oneliner ahora que tenemos streams? –

5

Esto solo se puede hacer cuando los tipos de clave y valor son los mismos.

Dado:

HashMap<String,String> map; 

puedo crear una matriz de este mapa con este sencillo bucle:

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

Iterar sobre su mapa utilizando entrySet, y llenar su registro de matriz con el objeto de entrada

3

¿Qué tal

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

o, para ser más específico acerca de los tipos, digamos que son Strings: Set 's toArray toma un argumento de pista, por lo que

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

Editar: Me acabo de dar cuenta de un par de días más tarde que aunque este puede funcionar por casualidad, en general no debería. El motivo es el intermedio Set; aunque está "respaldado por el mapa", no parece existir una garantía explícita de que se repita en un orden en particular. Por lo tanto, los arreglos de entrada y de tecla podrían no estar en el mismo orden, ¡lo que es un desastre seguro!