2014-07-26 5 views
6

पर कनवर्ट करें मेरे पास Set<Object> है।संग्रह <Object> संग्रह <String>

मुझे इससे Collection<String> प्राप्त करने की आवश्यकता है।

मैं सभी वस्तुओं को जोड़ने और डालने के लिए लूप बनाने के बारे में सोच सकता हूं, लेकिन यह बदसूरत और शायद धीमा है।

@Override 
public Collection<String> keys() 
{ 
    // props is based on HashMap 
    Set<String> keys = new HashSet<>(); 
    for (Object o : props.keySet()) { 
     keys.add((String) o); 
    } 
    return keys; 
} 

सही तरीका क्या है?

+0

जावा का कौन सा संस्करण आप उपयोग कर रहे हैं? –

+1

आप 'ऑब्जेक्ट' से 'स्ट्रिंग' में कैसे परिवर्तित करने जा रहे हैं? क्या आपको प्रत्येक पर 'toString()' कॉल करने की आवश्यकता है? या क्या आपके पास कुछ प्राथमिक ज्ञान है कि ऑब्जेक्ट्स 'स्ट्रिंग' हैं? –

+0

हां, मुझे पता है कि वे स्ट्रिंग्स हैं। अद्यतन प्रश्न की जांच करें, अब यह अधिक स्पष्ट है। और @ लुइगी मैन्डोज़ा जावा 7 है। – MightyPork

उत्तर

6

आप जानते हैं कि सभी ObjectHashSet अंदर रों तार कर रहे हैं, तो आप बस इसे डाली कर सकते हैं:

Collection<String> set = (Collection<String>)(Collection<?>)props.keySet(); 

जावा विलोपन के साथ जेनरिक लागू करता है, जिसका अर्थ है कि HashSet ही बस इतना ही क्रम में पता नहीं है HashSet<Object> - यह सिर्फ यह जानता है कि यह HashSet है, और संकलक प्रोग्रामर को रनटाइम अपवाद बनाने वाली चीज़ों से बचने में मदद करने के लिए ज़िम्मेदार है। लेकिन अगर आप जानते हैं कि आप क्या कर रहे हैं, तो संकलक आपको इस कलाकार को करने से नहीं रोकेगा।

+0

क्षमा करें मैं पर्याप्त स्पष्ट नहीं था। जांचें कि क्या उत्तर वास्तव में मैं जो कर रहा हूं उसके लिए मान्य है। – MightyPork

+0

@MightyPork: हाँ, उत्तर अभी भी मान्य है। चूंकि आपको रूपांतरण के लिए कोई विशिष्ट कदम नहीं करना है (आप केवल 'ऑब्जेक्ट की' स्ट्रिंग की 'कास्टिंग कर रहे हैं, तो आप संग्रह को कास्ट करके एक ही अंत प्राप्त कर सकते हैं। – StriplingWarrior

+0

कोई अच्छा नहीं, मैंने वापसी की कोशिश की (सेट ) props.keySet(); 'लेकिन यह कहा गया कि मैं सेट सेट सेट करने के लिए सेट नहीं कर सकता। – MightyPork

संबंधित मुद्दे