<স্ট্রিং> কে অ্যারেলিস্টে <স্ট্রিং> রূপান্তর ইস্যুতে তালিকাবদ্ধ করুন


91

আমার একটি নিম্নোক্ত পদ্ধতি রয়েছে ... যা বাক্যগুলির তালিকাটি গ্রহণ করে প্রতিটি বাক্যকে শব্দের মধ্যে বিভক্ত করে। এই যে এটা:

public List<String> getWords(List<String> strSentences){
allWords = new ArrayList<String>();
    Iterator<String> itrTemp = strSentences.iterator();
    while(itrTemp.hasNext()){
        String strTemp = itrTemp.next();
        allWords = Arrays.asList(strTemp.toLowerCase().split("\\s+"));          
    }
    return allWords;
}

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

HashMap<String, ArrayList<String>>

সুতরাং এই পদ্ধতিটি তালিকা ফিরিয়ে দেয় এবং আমার একটি অ্যারেলিস্ট প্রয়োজন? আমি যদি কাস্ট করার চেষ্টা করি তবে এটি ওয়ার্কআউট হয় না ... কোনও পরামর্শ?

এছাড়াও, যদি আমি হ্যাশম্যাপে অ্যারেলিস্ট তালিকাতে পরিবর্তন করি তবে আমি পাই

java.lang.UnsupportedOperationException

আমার কোড এই লাইন কারণে

sentenceList.add(((Element)sentenceNodeList.item(sentenceIndex)).getTextContent());

এর থেকে আরও ভাল পরামর্শ?

উত্তর:


53

প্রথমত, মানচিত্রটি কেন HashMap<String, ArrayList<String>>এবং একটি নয় HashMap<String, List<String>>? মানটি ইন্টারফেসের একটি নির্দিষ্ট প্রয়োগ List( ArrayListএই ক্ষেত্রে) হতে হবে তার কোনও কারণ আছে কি ?

Arrays.asListএকটি ফেরত দেয় না java.util.ArrayList, সুতরাং আপনি Arrays.asListটাইপের একটি পরিবর্তনশীলটির রিটার্ন মান নির্ধারণ করতে পারবেন না ArrayList

পরিবর্তে:

allWords = Arrays.asList(strTemp.toLowerCase().split("\\s+"));

এটা চেষ্টা কর:

allWords.addAll(Arrays.asList(strTemp.toLowerCase().split("\\s+")));

4
এবং বিশেষত UnsupportedOperationExceptionকারণটি হ'ল কারণ Arrays.asListপদ্ধতিটি অ্যারের দ্বারা ব্যাক করা একটি নির্দিষ্ট আকারের তালিকা দেয় - এটি সংশোধন করা যায় না। @ জেস্পার দ্বারা এখানে উপস্থাপিত সমাধান এটি এড়াতে পারবে।
ডানকান জোন্স

191

কাস্ট কাজ করে যেখানে তালিকার আসল উদাহরণটি একটি ArrayList। যদি এটি হয়, বলুন, একটি Vector(যা এর আরেকটি এক্সটেনশন List) এটি একটি ক্লাসকাস্টএক্সসেপশন নিক্ষেপ করবে।

আপনার হাশম্যাপের সংজ্ঞা পরিবর্তন করার সময় ত্রুটিটি পরে উপাদানগুলি প্রক্রিয়াজাতকরণের কারণে ঘটেছিল এবং সেই প্রক্রিয়াটি এমন কোনও পদ্ধতির প্রত্যাশা করে যা কেবলমাত্র সংজ্ঞায়িত হয়েছে ArrayList। ব্যতিক্রম আপনাকে বলে যে এটি যে পদ্ধতিটি খুঁজছিল তা এটি খুঁজে পায়নি।

ArrayListপুরানো বিষয়বস্তু সহ একটি নতুন তৈরি করুন ।

new ArrayList<String>(myList);

41

অ্যারেলিস্টে দেখুন # অ্যাডএল (সংগ্রহ)

নির্দিষ্ট সংগ্রহের আইট্রেটর দ্বারা সেগুলি ফিরিয়ে দেওয়া হয়েছে এমন ক্রমে এই তালিকাটির শেষে নির্দিষ্ট সংকলনের সমস্ত উপাদানকে যুক্ত করে। অপারেশন চলমান অবস্থায় নির্দিষ্ট সংগ্রহটি সংশোধন করা হলে এই অপারেশনের আচরণ নির্ধারিত। (এর থেকে বোঝা যায় যে যদি নির্দিষ্ট সংগ্রহটি এই তালিকা হয় তবে এই কলটির আচরণ অপরিবর্তিত রয়েছে এবং এই তালিকাটি কোনও গুরুত্বহীন নয়))

সুতরাং মূলত আপনি ব্যবহার করতে পারেন

ArrayList<String> listOfStrings = new ArrayList<>(list.size());
listOfStrings.addAll(list);

13

কোটলিনে তালিকাটি কনস্ট্রাক্টর প্যারামিটার হিসাবে পাস করার মাধ্যমে অ্যারেলিস্টে রূপান্তর করা যায়।

ArrayList(list)

5

Arrays.asListউদাহরণটি ফেরত দেয় না java.util.ArrayListতবে এটি উদাহরণ দেয় java.util.Arrays.ArrayList

আপনি ArrayListনির্দিষ্ট তথ্য অ্যাক্সেস করতে চাইলে আপনাকে অ্যারেলিস্টে রূপান্তর করতে হবে

allWords.addAll(Arrays.asList(strTemp.toLowerCase().split("\\s+")));

0

চেষ্টা করা এবং পরীক্ষিত পদ্ধতির।

public static ArrayList<String> listToArrayList(List<Object> myList) {
        ArrayList<String> arl = new ArrayList<String>();
        for (Object object : myList) {
            arl.add((String) object);
        }
        return arl;

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