ArrayList<Object> list = new ArrayList<Object>();
list.add(1);
list.add("Java");
list.add(3.14);
System.out.println(list.toString());
मैंने कोशिश की:
ArrayList<String> list2 = (String)list;
लेकिन इसने मुझे एक जटिल त्रुटि दी।
ArrayList<Object> list = new ArrayList<Object>();
list.add(1);
list.add("Java");
list.add(3.14);
System.out.println(list.toString());
मैंने कोशिश की:
ArrayList<String> list2 = (String)list;
लेकिन इसने मुझे एक जटिल त्रुटि दी।
जवाबों:
चूंकि यह वास्तव में तार की एक सूची नहीं है, इसलिए सबसे आसान तरीका यह है कि इस पर लूप करें और प्रत्येक आइटम को अपने आप तार की एक नई सूची में परिवर्तित करें:
List<String> strings = list.stream()
.map(object -> Objects.toString(object, null))
.collect(Collectors.toList());
या जब आप जावा 8 पर अभी तक नहीं हैं:
List<String> strings = new ArrayList<>(list.size());
for (Object object : list) {
strings.add(Objects.toString(object, null));
}
या जब आप जावा 7 पर अभी तक नहीं हैं:
List<String> strings = new ArrayList<String>(list.size());
for (Object object : list) {
strings.add(object != null ? object.toString() : null);
}
ध्यान दें कि आपको इंटरफ़ेस के खिलाफ घोषित किया जाना चाहिए ( java.util.List
इस मामले में), कार्यान्वयन नहीं।
String.valueOf(object)
, तुम क्या करने की जरूरत नहीं होगी object != null ? object.toString() : null
बात
"null"
शाब्दिक के बजाय मूल्य के साथ एक स्ट्रिंग जोड़ देगा null
। यह व्यवसाय की आवश्यकताओं पर आगे निर्भर करता है कि यह वांछित है या नहीं। मेरे लिए, यह बिल्कुल स्वीकार्य नहीं होगा क्योंकि यह एक संभावित प्रमुख बग का परिचय देता है।
"null"
बिल्कुल नहीं है null
। null
जावा में एक विशेष अर्थ नहीं है। यह कोई मतलब नहीं है if (item.equals("null"))
कि जब उसके लिए जाँच करने के लिए मजबूर किया जाए ।
ऐसा करना सुरक्षित नहीं है!
सोचो अगर तुम्हारे पास था:
ArrayList<Object> list = new ArrayList<Object>();
list.add(new Employee("Jonh"));
list.add(new Car("BMW","M3"));
list.add(new Chocolate("Twix"));
यह उन वस्तुओं की सूची को किसी भी प्रकार में बदलने के लिए समझ में नहीं आएगा।
Object#toString()
तरीका । हालांकि, मानव प्रस्तुति की तुलना में अन्य उद्देश्यों के लिए एक्स से स्ट्रिंग तक पूरे प्रकार का रूपांतरण वास्तव में बहुत मायने नहीं रखता है।
यदि आप इसे गंदे तरीके से करना चाहते हैं, तो यह प्रयास करें।
@SuppressWarnings("unchecked")
public ArrayList<String> convert(ArrayList<Object> a) {
return (ArrayList) a;
}
लाभ: यहां आप सभी वस्तुओं पर ध्यान न देकर समय की बचत करते हैं।
नुकसान: आपके पैर में छेद हो सकता है।
आप निम्नलिखित के रूप में ऐसा करने के लिए वाइल्डकार्ड का उपयोग कर सकते हैं
ArrayList<String> strList = (ArrayList<String>)(ArrayList<?>)(list);
आपका कोड ArrayList<String> list2 = (String)list;
संकलित नहीं करता है क्योंकि list2
प्रकार का नहीं है String
। लेकिन यह एकमात्र समस्या नहीं है।
जावा 8 लैम्ब्डा का उपयोग करना:
ArrayList<Object> obj = new ArrayList<>();
obj.add(1);
obj.add("Java");
obj.add(3.14);
ArrayList<String> list = new ArrayList<>();
obj.forEach((xx) -> list.add(String.valueOf(xx)));
Java Generics के साथ X की एक सूची लेता है और T की एक सूची देता है जो X, Sweet को बढ़ाता या कार्यान्वित करता है!
// the cast is is actually checked via the method API
@SuppressWarnings("unchecked")
public static <T extends X, X> ArrayList<T> convertToClazz(ArrayList<X> from, Class<X> inClazz, Class<T> outClazz) {
ArrayList<T> to = new ArrayList<T>();
for (X data : from) {
to.add((T) data);
}
return to;
}