HashMap to Array: throws java.lang.ArrayStoreException



我应该将哈希转换为数组,但它向我抛出了一个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);
}

相关内容

最新更新