<String> - ArrayList <String> dönüştürme sorununu listeleyin


91

Aşağıdaki bir yöntemim var ... aslında cümle listesini alan ve her cümleyi kelimelere ayıran. İşte burada:

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

Bu listeyi aşağıdaki formatta bir hashmap'e geçirmem gerekiyor

HashMap<String, ArrayList<String>>

bu nedenle bu yöntem List döndürür ve bir arrayList'e ihtiyacım var? Eğer döküm yapmaya çalışırsam antrenman yapmaz ... herhangi bir öneri?

Ayrıca, ArrayList'i bir HashMap'te List olarak değiştirirsem,

java.lang.UnsupportedOperationException

kodumdaki bu satır nedeniyle

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

Daha iyi bir öneriniz var mı?

Yanıtlar:


53

Her şeyden önce, neden harita a HashMap<String, ArrayList<String>>ve a değil HashMap<String, List<String>>? Değerin belirli bir arayüz uygulaması olması gerektiğinin bir nedeni var mı List( ArrayListbu durumda)?

Arrays.asLista döndürmez java.util.ArrayList, bu nedenle Arrays.asListtürünün bir değişkenine dönüş değerini atayamazsınız ArrayList.

Onun yerine:

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

Bunu dene:

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

3
Ve özellikle bunun UnsupportedOperationExceptionnedeni, Arrays.asListyöntemin bir dizi tarafından desteklenen sabit boyutlu bir liste döndürmesidir - değiştirilemez. Burada @Jesper tarafından sunulan çözüm bundan kaçınacaktır.
Duncan Jones

191

Cast, listenin gerçek örneğinin bir ArrayList. Örneğin, bir Vector(başka bir uzantısı olan List) ise, bir ClassCastException oluşturacaktır.

HashMap'inizin tanımını değiştirirken oluşan hata, daha sonra işlenen öğelerden kaynaklanır ve bu işlem, yalnızca içinde tanımlanan bir yöntemi bekler ArrayList. İstisna, aradığı yöntemi bulamadığını size söyler.

Eskisinin ArrayListiçeriğiyle yeni bir tane oluşturun.

new ArrayList<String>(myList);

43

ArrayList # addAll (Koleksiyon) ' a bir göz atın

Belirtilen koleksiyondaki tüm öğeleri, belirtilen koleksiyonun Yineleyicisi tarafından döndürülme sırasına göre bu listenin sonuna ekler. İşlem devam ederken belirtilen koleksiyon değiştirilirse, bu işlemin davranışı tanımsızdır. (Bu, belirtilen koleksiyon bu listeyse ve bu liste boş değilse, bu çağrının davranışının tanımsız olduğu anlamına gelir.)

Yani temelde kullanabilirsin

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

14

Kotlin List'de yapıcı parametre olarak geçirilerek ArrayList'e dönüştürülebilir.

ArrayList(list)

5

Arrays.asListörneğini döndürmez java.util.ArrayListancak örneğini döndürür java.util.Arrays.ArrayList.

ArrayListBelirli bilgilere erişmek istiyorsanız, ArrayList'e dönüştürmeniz gerekecektir.

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

0

Denenmiş ve test edilmiş yaklaşım.

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

    }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.