如何将HashMap转换为二维数组?
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++;
}
只有当键和值的类型相同时才能执行此操作。
给定:
HashMap<String,String> map;
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++;
}
你能行吗?
Object[][] array = new Object[][]{map.keySet.toArray(), map.entrySet.toArray()};
或者更具体地说,如果它们是 Strings
类型: Set
的 toArray
方法需要一个提示参数,因此
String[][] array = new String[][]{map.keySet.toArray(new String[0]), map.entrySet.toArray(new String[0])};
编辑: 几天后我才意识到,虽然这个方法可能偶尔可行,但通常不应该这样做。原因是中间的Set
虽然“由映射支持”,但似乎没有明确保证它会按任何特定顺序迭代。因此,键和条目数组可能不会以相同的顺序排列,这肯定是灾难性的!
map.keySet
和 map.entrySet
而不是 map.keySet()
和 map.entrySet()
呢? - Qohelet使用Java 8 Stream:
@Test
void testMapToArray() {
Map<String, Object> map = new HashMap<>();
map.put("key1", "value1");
map.put("key2", 2);
Object[][] arr =
map.entrySet().stream()
.map(e -> new Object[]{e.getKey(), e.getValue()})
.toArray(Object[][]::new);
System.out.println(Arrays.deepToString(arr));
}
输出:
[[key1, value1], [key2, 2]]