2010-02-15 13 views

Antwort

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

Können wir einen oneliner erstellen, jetzt haben wir Streams? –

5

Dies kann nur durchgeführt werden, wenn die Typen von Schlüssel und Wert identisch sind.

Gegeben:

HashMap<String,String> map; 

ich ein Array von dieser Karte mit dieser einfachen Schleife erstellen:

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

Iterate über Ihre Karte entrySet verwenden, und füllen Sie Ihre Array Datensatz mit dem Eintrag Objekt

3

Wie wäre es mit

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

Oder genauer über die Art zu sein, lassen Sie uns sagen, sie sind Strings: Set ‚s toArray einen Hinweis Argument, so dass

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

Edit: ich später nur ein paar Tage realisiert dass während dieser kann zufällig funktionieren, im Allgemeinen sollte es nicht. Der Grund ist das Zwischenprodukt Set; Obwohl es "von der Karte unterstützt wird", scheint es keine explizite Garantie zu geben, dass es in einer bestimmten Reihenfolge iterieren wird. Daher sind die Schlüssel- und Eingabearrays möglicherweise nicht in der gleichen Reihenfolge, was sicherlich ein Desaster ist!