我应该将哈希转换为数组,但它向我抛出了一个java.lang.ArrayStoreException
。我一步一步来,试着看看我能怎么组织它,但它不能运行。
散列:
{
objectOne : {
attributeOne : 1,
attributeTwo : 2
},
objectTwo : {
attributeOne : 3,
attributeTwo : 4
}
}
变成数组,结构为:
[
{
name : 'objectOne',
attributes : {
attributeOne : 1,
attributeTwo : 2
}
}, {
name : 'objectTwo',
attributes : {
attributeOne : 3,
attributeTwo : 4
}
}
]
我的代码抛出:
java.lang.ArrayStoreException: java.lang.String
at java.util.AbstractCollection.toArray(AbstractCollection.java:171)
at hashToArray2.main(hashToArray2.java:36)
我已经尝试将参数更改为:
Object[] keys = map.keySet().toArray(new Object[map.size()][]));
Object[] values = map.values().toArray(new Object[map.size()][]));
但它会产生同样的问题。
代码:public class hashToArray2{
public static void main (String[] args) throws ClassNotFoundException{
Class.forName("hashToArray2");
System.out.println("hashToArray class successfully loaded");
//Creating object1 + input values
HashMap<String, Integer> obj1 = new HashMap<String, Integer>();
obj1.put("attributeOne", 1);
obj1.put("attributeTwo", 2);
//Creating object2 + input values
HashMap<String, Integer> obj2 = new HashMap<String, Integer>();
obj2.put("attributeOne", 3);
obj2.put("attributeTwo", 4);
//Combining obj1+2
//HashMap<String, Integer> map = new HashMap<String, Integer>();
//map.putAll(obj1);
//map.putAll(obj2);
//to array
Object[][] arr1 = new String[obj1.size()][2];
Object[][] arr2 = new String[obj2.size()][2];
//obj1
Object[] keys1 = obj1.keySet().toArray(new Object[obj1.size()][]);
Object[] values1 = obj1.values().toArray(new Object[obj1.size()][]);
for(int i = 0; i < arr1.length; i++){
arr1[i][0] = keys1[i];
arr1[i][1] = values1[i];
}
for(int j = 0; j < arr1.length; j++){
for(int k = 0; k < arr1[j].length; k++){
System.out.println(arr1[j][k]);
}
}
//obj2
Object[] keys2 = obj2.keySet().toArray(new Object[obj2.size()][]);
Object[] values2 = obj2.values().toArray(new Object[obj2.size()][]);
for(int a = 0; a < arr2.length; a++){
arr2[a][0] = keys2[a];
arr2[a][1] = values2[a];
}
for(int b = 0; b < arr2.length; b++){
for(int c = 0; c < arr2[b].length; c++){
System.out.println(arr2[b][c]);
}
}
}
}
异常是由这行代码引起的:
Object[] keys1 = obj1.keySet().toArray(new Object[obj1.size()][]);
那么,它在做什么:它在Set<String>
上调用toArray(T[])
。toArray()
将一个数组作为参数,并将集合的所有值(在本例中为字符串实例)存储在该数组中。但你传递的是new Object[obj1.size()][]
作为参数,即Object[]
的数组,即对象数组的数组。String不是Object[]
,因此出现错误。
我真的不知道你想做什么,因为你的描述和代码不匹配。我所知道的是,你的代码乞求自定义类的属性,而不是映射和数组。
我不喜欢只写邮政编码,但我认为这是你想要的。
List<Map> list = new ArrayList<>();
for(Map.Entry<String, Integer> entry : hashes.entrySet()) {
Map newMap = new HashMap();
newMap.put("name", entry.getKey());
newMap.put("attributes", entry.getValue());
list.add(newMap);
}