将 Object[] 从哈希映射键集转换为 String[]?

2022-09-02 12:18:52
Set<String> keys = mappings.keySet();
String[] keyArray = (String[]) keys.toArray();

String hashmapDetails = "";
for(int p=0; p < keyArray.length; p++){
    String[] details = keyArray[p].split("/");
    hashmapDetails += details[1];
    hashmapDetails += mappings.get(keyArray[p]);
    if (p != keyArray.length -1){
        hashmapDetails += ";";
    }
}

原谅我缺乏理解,但我试图探索哈希图的用法。我知道 toArray() 返回一个 Object[]。但是,是否可以将其键入转换为 String[]?正如你在代码中看到的,稍后,我需要遍历一个数组并进行一些拆分和其他字符串操作。

通过这样做,我得到了一个错误:

java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.lang.String[]

任何关于我应该如何解决这个问题的指导都非常感谢。谢谢!


答案 1

不能简单地将数组强制转换为数组。您应该改用 toArray 的通用版本,它应该工作得更好:Object[]String[]

String[] keyArray = keys.toArray(new String[keys.size()]);

另请注意,您可以简单地迭代(这将保存所有调用)并使用StringBuilder以获得更好的字符串连接效率:entrySetget

StringBuilder hashmapDetails = new StringBuilder();
for(Map.Entry<String, String> e : mappings.entrySet()) {
    String[] details = e.getKey().split("/");
    hashmapDetails += details[1];
    hashmapDetails += e.getValue();
    hashmapDetails += ";";
}

String result = hashmapDetails.substring(0, hashmapDetails.length() - 1);

答案 2

可以将键集强制转换为字符串[]。试试这个:

String[] keys = map.keySet().toArray(new String[0]);