আমি কীভাবে অ্যারেলিস্ট <অবজেক্ট> অ্যারেলিস্ট <স্ট্রিং> এ রূপান্তর করতে পারি?


95
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; 

তবে এটি আমাকে একটি সংকলন ত্রুটি দিয়েছে।


5
কেন আপনি যে কাজ করতে চান? মানে এটি নিরাপদ নয়। উদাহরণটি দেখুন।
অ্যাথস্প্ক

6
আপনি তালিকায় নন-স্ট্রিং রাখছেন। আপনি যদি তাদের স্ট্রিং করতে বাধ্য করেন তবে কী হবে সে সম্পর্কে আপনার প্রত্যাশা কী?
বেন জোটো

5
আমি ধরে নিলাম আপনার অর্থ: অ্যারেলিস্ট <স্ট্রিং> লিস্ট 2 = (অ্যারেলিস্ট <স্ট্রিং>) তালিকা;
কোস্টি সিউদাতু

উত্তর:


132

যেহেতু এটি আসলে স্ট্রিংগুলির তালিকা নয়, তাই সবচেয়ে সহজ উপায় হ'ল এটির উপর দিয়ে লুপ করা এবং প্রতিটি আইটেমকে নিজেই তারের একটি নতুন তালিকায় রূপান্তর করা:

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এই ক্ষেত্রে) বিরুদ্ধে ঘোষণা করা উচিত , বাস্তবায়ন নয়।


6
আমি পছন্দ করি এই বাস্তবায়নটি কীভাবে নাল মান সংরক্ষণ করা হয়।

4
আপনি যদি ব্যবহার করেন তবে আপনাকে জিনিসটি String.valueOf(object)করতে হবে নাobject != null ? object.toString() : null
ব্যবহারকারী 219882

4
@ টমাস: এটি "null"আক্ষরিক পরিবর্তে মান সহ একটি স্ট্রিং যুক্ত করবে null। এটি ব্যবসায়ের আবশ্যকতার উপর নির্ভর করে যে তা কাঙ্ক্ষিত হোক বা না হোক। আমার পক্ষে এটি মোটেও গ্রহণযোগ্য হবে না কারণ এটি একটি সম্ভাব্য বড় বাগটি প্রবর্তন করে।
বালুসসি

4
@ টমাস: "null"মোটেও তা nullনয়। nullজাভা একটি বিশেষ অর্থ আছে। if (item.equals("null"))পরে এর জন্য চেক করার সময় এটি করতে বাধ্য হওয়া কোনও অর্থবোধ করে না ।
বালুসসি

4
@ টমাস: আপনি কেবল জাভাটির শক্তিশালী টাইপিং প্রকৃতিকে পরাস্ত করছেন। তবে যেমনটি বলা হয়েছে, এটি ব্যবসায়ের প্রয়োজনীয়তার উপর নির্ভর করে যে তা কাঙ্ক্ষিত। আমার জন্য, এটি কেবল অগ্রহণযোগ্য। আপনি যা চান তা করুন এবং সময় শেখাবে :)
BalusC

18

এটি করা নিরাপদ নয়!
আপনার যদি মনে হয়:

ArrayList<Object> list = new ArrayList<Object>();
list.add(new Employee("Jonh"));
list.add(new Car("BMW","M3"));
list.add(new Chocolate("Twix"));

Ob অবজেক্টের তালিকাটি কোনও প্রকারে রূপান্তরিত করার অর্থ হবে না।


4
যদি না তাদের Object#toString()পদ্ধতি ওভাররাইড হয়। যাইহোক, মানব উপস্থাপনা ব্যতীত অন্য উদ্দেশ্যে এক্স থেকে স্ট্রিংয়ে পুরো ধরণের রূপান্তরটি আসলে খুব বেশি বোঝায় না।
বালুসসি

13

আপনি যদি এটি নোংরাভাবে করতে চান তবে এটি ব্যবহার করে দেখুন।

@SuppressWarnings("unchecked")
public ArrayList<String> convert(ArrayList<Object> a) {
   return (ArrayList) a;
}

সুবিধা: এখানে আপনি সমস্ত বস্তুর উপর পুনরাবৃত্তি না করে সময় বাঁচান।

অসুবিধা: আপনার পায়ের ছিদ্র তৈরি করতে পারে।


13

জাভা 8 ব্যবহার করে আপনি এটি করতে পারেন:

List<Object> list = ...;
List<String> strList = list.stream()
                           .map( Object::toString )
                           .collect( Collectors.toList() );

12

পেয়ারা ব্যবহার :

List<String> stringList=Lists.transform(list,new Function<Object,String>(){
    @Override
    public String apply(Object arg0) {
        if(arg0!=null)
            return arg0.toString();
        else
            return "null";
    }
});

12

নিম্নলিখিত হিসাবে এটি করতে আপনি ওয়াইল্ডকার্ড ব্যবহার করতে পারেন

ArrayList<String> strList = (ArrayList<String>)(ArrayList<?>)(list);


5

আপনার কোডটি ArrayList<String> list2 = (String)list;সংকলন করে না কারণ list2প্রকারের নয় String। তবে এটাই একমাত্র সমস্যা নয়।


0

জাভা 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)));

0

জাভা জেনেরিক্সের সাথে এক্সের একটি তালিকা নেয় এবং এক্স, মিষ্টি প্রসারিত বা প্রয়োগকারী টির একটি তালিকা ফেরত দেয়!

    // 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;
}

0

একটি সহজ সমাধান:

List<Object> lst  =listOfTypeObject;   
ArrayList<String> aryLst = new ArrayList<String>();
    for (int i = 0; i < lst.size(); i++) {
        aryLst.add(lst.get(i).toString());
    }

দ্রষ্টব্য: তালিকায় ডেটাটাইপ স্ট্রিংয়ের সমস্ত উপাদান থাকা অবস্থায় এটি কাজ করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.