2009-11-11 13 views
5

एक वर्ग (उदाहरण के लिए यूआरआई) मानें जो कन्स्ट्रक्टर और toString() विधि का उपयोग करके स्ट्रिंग में कनवर्ट करने योग्य है।स्ट्रिंग संग्रह के लिए कुछ वर्ग के जावा संग्रह को कनवर्ट करना

मेरे पास ArrayList<URI> है और मैं इसे ArrayList<String>, या दूसरी तरफ कॉपी करना चाहता हूं।

क्या जावा मानक लाइब्रेरी में कोई उपयोगिता फ़ंक्शन है जो यह करेगा? कुछ की तरह:

java.util.collections.copy(urlArray,stringArray);

मैं जानता हूँ कि उपयोगिता पुस्तकालयों कि कि समारोह प्रदान करते हैं देखते हैं, लेकिन मैं एक अनावश्यक पुस्तकालय जोड़ने के लिए नहीं करना चाहती।

मुझे यह भी पता है कि इस तरह के एक समारोह को कैसे लिखना है, लेकिन यह कोड पढ़ने के लिए परेशान है और यह पता चलता है कि किसी ने लिखा है कि मानक पुस्तकालय में पहले से मौजूद हैं।

उत्तर

4

नहीं, ऐसा करने के लिए कोई मानक जेडीके शॉर्टकट नहीं है।

+0

जेडीके 7 के फोर्क-जॉइन फ्रेमवर्क में समांतर सरणी परिवर्तन फ़ंक्शन होने वाला था, लेकिन समझौते की कमी (आईआईआरसी) के कारण उन सभी चीजों को हटा दिया गया। –

+0

... और यह आम सहमति-आधारित मानक बनाने की समस्याओं में से एक है :-( –

0

चूंकि दो प्रकार के संग्रह संगत नहीं हो सकते हैं, इसलिए एक टाइप किए गए संग्रह को किसी अन्य टाइप किए गए संग्रह में परिवर्तित करने के लिए कोई अंतर्निहित विधि नहीं है।

http://commons.apache.org/collections/

मेरा मानना ​​है कि CollectionUtils एक विधि को बदलने है:

2

कॉमन्स-संग्रह पर एक नज़र डालें।

+0

संभवतः Google संग्रह लाइब्रेरी में कुछ समान है। –

+0

क्षमा करें, बस देखा कि आप अतिरिक्त पुस्तकालयों को जोड़ना नहीं चाहते हैं। – Eric

5

मुझे पता है तुम अतिरिक्त लाइब्रेरी जोड़ने के लिए नहीं करना चाहते हैं, लेकिन जो एक खोज इंजन से इस पाता है किसी के लिए, गूगल-संग्रह में आप उपयोग कर सकते हैं:

List<String> strings = Lists.transform(uris, Functions.toStringFunction()); 

एक ही रास्ता है, और

List<String> uris = Lists.transform(strings, new Function<String, URI>() { 
    public URI apply(String from) { 
    try { 
     return new URI(from); 
    } catch (URISyntaxException e) { 
     // whatever you need to do here 
    } 
    } 
}); 

दूसरा।

0

प्रयास करें:

public ArrayList<String> convert(ArrayList<URI> source) { 
    ArrayList<String> dest=new ArrayList<String>(); 

    for(URI uri : source) 
     dest.add(source.toString()); 

    return dest; 
} 

गंभीरता से, एक अंतर्निहित एपीआई कि करने के लिए एक बहुत की पेशकश करेगा?

इसके अलावा, बहुत ओओ नहीं। यूआरआई सरणी शायद एक कक्षा में लपेटा जाना चाहिए। कक्षा में .asStrings() विधि हो सकती है।

इसके अलावा आप शायद पाएंगे कि आपको स्ट्रिंग संग्रह संस्करण की आवश्यकता भी नहीं है (या यहां तक ​​कि चाहते हैं) यदि आप अपनी यूआरआई कक्षा सही ढंग से लिखते हैं। आप बस अपने यूआरआई कक्षा पर getAsString (int अनुक्रमणिका) विधि, या getStringIterator() विधि चाहते हैं, तो आप अपनी स्ट्रिंग संग्रह को पारित करने के लिए जो भी तरीका जा रहे हैं, उसमें आप अपनी यूआरआई कक्षा को पास कर सकते हैं।

+0

दरअसल यह बहुत है ओओ। आप इसे हर समय गतिशील रूप से टाइप की गई भाषाओं जैसे जावास्क्रिप्ट और पायथन में करते हैं। स्टेटिक टाइपिंग ओओ की आवश्यकता नहीं है। मैं आपके जैसे कन्वर्ट() फ़ंक्शन लिखना समाप्त कर सकता हूं लेकिन यह जेनेरिक लेगा।"स्ट्रिंग" अंतर्निर्मित प्रकारों के बीच एक विशेष मामला है: प्रत्येक ऑब्जेक्ट में एक toString() विधि होती है लेकिन इसकी आवश्यकता नहीं होती है कि "MyClass newObj = new MyClass (oldObj.toString());" एक वस्तु उत्पन्न करें जैसे कि newObj.equals (oldObj)। पायथन में "__repr__" विधि वह करती है, और जावास्क्रिप्ट में आप जेएसओएन और पीठ में कुछ भी परिवर्तित कर सकते हैं। –

+0

असल में गैर-ओओ मुद्दा यह नहीं है कि यह एक प्रकार का नहीं है, यह है कि मैंने जो लिखा है वह एक विधि नहीं है, यह एक कार्य है। मूल स्तर पर, यदि आप विधियों के बजाय फ़ंक्शन लिख रहे हैं तो आप या तो कुछ पैच कर रहे हैं, आप ओओ (पूर्व-मौजूदा कोड की वजह से) नहीं बना सकते हैं या आप इसे गलत कर रहे हैं। –

+0

(वैसे, मेरा मतलब यह नहीं था कि इतनी पूर्ण ध्वनि हो। इसमें अपवाद हैं - जैसे कि पुन: प्रयोज्य उपयोगिता कार्यों जैसे कि - लेकिन अक्सर अपवादों को किसी भी समय व्यावसायिक कक्षाओं के अंदर भी नहीं होना चाहिए)। वैसे भी, बिंदु यह है कि ऑब्जेक्ट एपीआई जो आप अपने शेष सिस्टम को किसी भी समय प्रदान करते हैं, व्यापार तर्क वर्गों पर आधारित होना चाहिए और उपयोगिता कार्यों और संग्रहों पर आधारित नहीं होना चाहिए क्योंकि उन्हें सभ्य एपीआई में नहीं बनाया जा सकता है इससे कोई फर्क नहीं पड़ता कि आप कितनी मेहनत करते हैं प्रयत्न। –

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