我应该将哈希转换为数组,但它会向我抛出一个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]);
}
}
}
}
答案 0 :(得分:1)
异常是由这行代码引起的:
Object[] keys1 = obj1.keySet().toArray(new Object[obj1.size()][]);
那么,它在做什么:它在toArray(T[])
上调用Set<String>
。 toArray()
将数组作为参数,并将该集合的所有值(在本例中为String实例)存储在该数组中。但是你传递new Object[obj1.size()][]
作为参数,即Object[]
的数组,即一组对象数组。字符串不是Object[]
,因此是错误。
我真的不知道你要做什么,因为你的描述确实与代码不符。我所知道的是,你的代码正在寻找带有属性的自定义类,而不是地图和数组。
答案 1 :(得分:0)
我不喜欢发布代码,但我认为这就是你想要的。
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);
}