2014-10-25 7 views
13

मैं हल सूची के किसी ऑब्जेक्ट पर सबलिस्ट फ़ंक्शन का उपयोग कर रहा हूं। समस्या यह है कि मैं आरएमआई का उपयोग कर रहा हूं और क्योंकि java.util.ArrayList $ SubList को एक गैर-धारावाहिक वर्ग द्वारा कार्यान्वित किया गया है, मुझे ऊपर वर्णित अपवाद मिला है जब मैं परिणामी ऑब्जेक्ट को रिमोट फ़ंक्शन में एक तर्क के रूप में ले जाने का प्रयास करता हूं भी। मैंने देखा है कि मुझे परिणामी सूची को एक नई लिंक्डलिस्ट या ऐरेलिस्ट में कॉपी करनी चाहिए और उसे पास करना चाहिए।

क्या कोई ऐसा फ़ंक्शन जानता है जो उदाहरण के लिए आसानी से ऐसा करने में मदद करता है?

List<String> list = originalList.subList(0, 10); 
+4

आप एक सूची को आसानी से कॉपी कर सकते हैं। ArrayList कन्स्ट्रक्टर एक मौजूदा संग्रह (आपके उपन्यास सहित) को एक तर्क के रूप में स्वीकार करेगा, और एक प्रतिलिपि करेगा। – Afforess

+0

@Afforess ने मेरा जवाब चुरा लिया। बस इसे एक सूची में कॉपी करें जिसे आप जानते हैं serializable है। – markspace

+0

ठीक है, यह है कि मैंने एक ऐरेलिस्ट का उपयोग करके किया है !! – Othmane

उत्तर

4

समाधान बस इस कोड था:

ArrayList<String> list = new ArrayList<String>(); 
list.addAll(originalList.subList(0, 10)); 
+2

अन्य प्रस्तावित समाधान बेहतर है क्योंकि यह संभवतः डिफ़ॉल्ट आकार आवंटित करने के बजाय पूर्ण आकार आवंटित करेगा और तत्वों को जोड़ने के दौरान उपन्यास के लिए स्थान आवंटित करेगा। –

21

यह है, क्योंकि subList द्वारा वापस सूची() विधि 'RandomAccessSubList' जो serializable नहीं है का एक उदाहरण है। इसलिए आपको subList() द्वारा लौटाई गई सूची से एक नई ArrayList ऑब्जेक्ट बनाने की आवश्यकता है।

ArrayList<String> list = new ArrayList<String>(originalList.subList(0, 10)); 
संबंधित मुद्दे