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"));
Ob অবজেক্টের তালিকাটি কোনও প্রকারে রূপান্তরিত করার অর্থ হবে না।
Object#toString()
পদ্ধতি ওভাররাইড হয়। যাইহোক, মানব উপস্থাপনা ব্যতীত অন্য উদ্দেশ্যে এক্স থেকে স্ট্রিংয়ে পুরো ধরণের রূপান্তরটি আসলে খুব বেশি বোঝায় না।
আপনি যদি এটি নোংরাভাবে করতে চান তবে এটি ব্যবহার করে দেখুন।
@SuppressWarnings("unchecked")
public ArrayList<String> convert(ArrayList<Object> a) {
return (ArrayList) a;
}
সুবিধা: এখানে আপনি সমস্ত বস্তুর উপর পুনরাবৃত্তি না করে সময় বাঁচান।
অসুবিধা: আপনার পায়ের ছিদ্র তৈরি করতে পারে।
আপনার কোডটি 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)));
জাভা জেনেরিক্সের সাথে এক্সের একটি তালিকা নেয় এবং এক্স, মিষ্টি প্রসারিত বা প্রয়োগকারী টির একটি তালিকা ফেরত দেয়!
// 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;
}