Конвертировать объект [] из набора hashmap в String []?
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() возвращает объект []. Тем не менее, нельзя ли вводить его в String []? Как вы можете видеть в кодах, позже мне нужно пройти через массив и выполнить некоторые расщепления и другие манипуляции с строками.
Сделав это, я получил сообщение об ошибке:
java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.lang.String[]
Любые рекомендации относительно того, как я должен заниматься этим, очень ценятся. Спасибо!
Ответы
Ответ 1
Вы не можете просто передать массив Object[]
в массив String[]
. Вместо этого вы должны использовать общую версию toArray
, которая должна работать лучше:
String[] keyArray = keys.toArray(new String[keys.size()]);
Также обратите внимание, что вы можете просто перебирать entrySet
(который будет сохранять все вызовы get
) и использовать StringBuilder для лучшей эффективности конкатенации строк:
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
Можно использовать keyset для String []. Попробуйте следующее:
String[] keys = map.keySet().toArray(new String[0]);
Ответ 3
Вы можете просто прокручивать через Set
, я не думаю, что нужно сделать шаг toArray
. Что-то вроде этого:
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 += ";";
}
}