2013-04-15 5 views
14
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() ऑब्जेक्ट देता है []। हालांकि, क्या इसे स्ट्रिंग [] पर डालना संभव नहीं है? जैसा कि आप कोड में देख सकते हैं, बाद में, मुझे एक सरणी से गुज़रना होगा और कुछ विभाजन और अन्य स्ट्रिंग मैनिपुलेशन करना होगा।ऑब्जेक्ट [] को हैशपैप कीसेट से स्ट्रिंग [] में परिवर्तित करें?

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

मैं यह कैसे से निपटने चाहिए पर कोई मार्गदर्शन बहुत सराहना की है:

ऐसा करने से मैं एक त्रुटि मिल गया। धन्यवाद!

उत्तर

21

आप Object[] सरणी को String[] सरणी पर आसानी से नहीं डाल सकते हैं। इसके बजाय आप the generic version of 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); 
+0

आपकी मदद के लिए धन्यवाद! ToArray के जेनेरिक संस्करण के साथ पहला समाधान मेरे लिए काफी अच्छा था, धन्यवाद! =) – lyk

+1

'toArray (नया स्ट्रिंग [0]) 'संस्करण निश्चित रूप से जाने का तरीका है। यह संक्षेप में है और व्यक्त करता है कि आप क्या कर रहे हैं। – NRitH

+0

@NRitH संभवतः लेकिन यह एक अनावश्यक वस्तु बनाता है इसलिए मैं "आकार" संस्करण पसंद करता हूं। – assylias

2

आप 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 += ";"; 
    } 
} 
6

स्ट्रिंग [] पर कीसेट डालना संभव है। इसे आज़माएं:

String[] keys = map.keySet().toArray(new String[0]); 
संबंधित मुद्दे