Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否将对象[]从hashmap键集转换为字符串[]?_Java_Hashmap - Fatal编程技术网

Java 是否将对象[]从hashmap键集转换为字符串[]?

Java 是否将对象[]从hashmap键集转换为字符串[]?,java,hashmap,Java,Hashmap,任何关于我应该如何解决这个问题的指导都是非常感谢的。谢谢 您不能简单地将对象[]数组强制转换为字符串[]数组。您应该改为使用,这应该更有效: java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.lang.String[] 还请注意,您可以简单地迭代入口集(这将保存所有get调用),并使用StringBuilder以提高字符串连接效率: String[] keyArray = keys.toArray(n

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

您不能简单地将
对象[]
数组强制转换为
字符串[]
数组。您应该改为使用,这应该更有效:

java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.lang.String[]
还请注意,您可以简单地迭代
入口集
(这将保存所有
get
调用),并使用StringBuilder以提高字符串连接效率:

String[] keyArray = keys.toArray(new String[keys.size()]);
StringBuilder hashmapDetails=new StringBuilder();
对于(Map.Entry e:mappings.entrySet()){
String[]details=e.getKey().split(“/”);
hashmapDetails+=详细信息[1];
hashmapDetails+=e.getValue();
hashmapDetails+=“;”;
}
字符串结果=hashmapDetails.substring(0,hashmapDetails.length()-1);

您可以在
集合中迭代,我认为没有必要执行
toArray
步骤。大概是这样的:

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);
Set keys=mappings.keySet();
字符串hashmapDetails=“”;
用于(字符串键:键){
String[]details=key.split(“/”);
hashmapDetails+=详细信息[1];
hashmapDetails+=mappings.get(键);
if(p!=keys.size()-1){
hashmapDetails+=“;”;
}
}

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

Set<String> keys = mappings.keySet();

String hashmapDetails = "";
for(String key : keys){
    String[] details = key.split("/");
    hashmapDetails += details[1];
    hashmapDetails += mappings.get(key);
    if (p != keys.size() -1){
        hashmapDetails += ";";
    }
}

谢谢你的帮助!toArray的通用版本的第一个解决方案对我来说已经足够好了,谢谢!=)
toArray(新字符串[0])
版本无疑是一个不错的选择。它很简洁,并且准确地表达了您正在做的事情。@NRitH可能会创建一个不必要的对象,所以我更喜欢“size”版本。@assylias IIRC,toArray()的版本接受数组参数,它只使用该参数来确定返回的类类型,所以传入的数组的大小无关紧要。@NRitH事实并非如此。如果数组足够大,则使用它,否则将创建一个新数组。javadoc中对此进行了解释:-另请参见:
Set<String> keys = mappings.keySet();

String hashmapDetails = "";
for(String key : keys){
    String[] details = key.split("/");
    hashmapDetails += details[1];
    hashmapDetails += mappings.get(key);
    if (p != keys.size() -1){
        hashmapDetails += ";";
    }
}
String[] keys = map.keySet().toArray(new String[0]);