Aufführen zu ArrayList Konvertierungsproblem

Lesezeit: 3 Minuten

Benutzer-Avatar
Skipper07

Ich habe eine folgende Methode … die tatsächlich die Liste der Sätze nimmt und jeden Satz in Wörter aufteilt. Hier ist es:

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

Ich muss diese Liste im folgenden Format an eine Hashmap übergeben

HashMap<String, ArrayList<String>>

Also gibt diese Methode List zurück und ich brauche eine ArrayList? Wenn ich versuche zu casten, klappt es nicht… irgendwelche Vorschläge?

Auch wenn ich die ArrayList in einer HashMap in List ändere, bekomme ich

java.lang.UnsupportedOperationException

wegen dieser Zeile in meinem Code

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

Irgendwelche besseren Vorschläge?

Cast funktioniert, wenn die tatsächliche Instanz der Liste eine ist ArrayList. Wenn es, sagen wir, a Vector (Das ist eine weitere Erweiterung von List) wird eine ClassCastException ausgelöst.

Der Fehler beim Ändern der Definition Ihrer HashMap ist darauf zurückzuführen, dass die Elemente später verarbeitet werden, und dieser Prozess erwartet eine Methode, die nur in definiert ist ArrayList. Die Ausnahme sagt Ihnen, dass die gesuchte Methode nicht gefunden wurde.

Erstelle eine neue ArrayList mit dem Inhalt des alten.

new ArrayList<String>(myList);

Zunächst einmal, warum ist die Karte a HashMap<String, ArrayList<String>> und nicht ein HashMap<String, List<String>>? Gibt es einen Grund, warum der Wert eine bestimmte Implementierung der Schnittstelle sein muss List (ArrayList in diesem Fall)?

Arrays.asList gibt nicht zurück a java.util.ArrayListsodass Sie den Rückgabewert von nicht zuweisen können Arrays.asList zu einer Variablen vom Typ ArrayList.

Anstatt von:

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

Versuche dies:

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

  • Und speziell die UnsupportedOperationException wird verursacht, weil die Arrays.asList -Methode gibt eine Liste fester Größe zurück, die von einem Array gestützt wird – sie kann nicht geändert werden. Die hier von @Jesper vorgestellte Lösung wird dies vermeiden.

    – Duncan Jones

    30. Oktober 2012 um 8:19 Uhr


Benutzer-Avatar
Verrückter Programmierer

Schauen Sie sich an ArrayList#addAll(Sammlung)

Fügt alle Elemente in der angegebenen Sammlung am Ende dieser Liste in der Reihenfolge an, in der sie vom Iterator der angegebenen Sammlung zurückgegeben werden. Das Verhalten dieses Vorgangs ist undefiniert, wenn die angegebene Sammlung geändert wird, während der Vorgang ausgeführt wird. (Dies impliziert, dass das Verhalten dieses Aufrufs undefiniert ist, wenn die angegebene Sammlung diese Liste ist und diese Liste nicht leer ist.)

Also im Grunde könnten Sie verwenden

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

In Kotlin kann List in ArrayList konvertiert werden, indem es als Konstruktorparameter übergeben wird.

ArrayList(list)

Benutzer-Avatar
Amit Deshpande

Arrays.asList gibt keine Instanz von zurück java.util.ArrayListaber es gibt eine Instanz von zurück java.util.Arrays.ArrayList.

Sie müssen in ArrayList konvertieren, wenn Sie darauf zugreifen möchten ArrayList genaue Informationen

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

Benutzer-Avatar
S Krishna

Bewährter Ansatz.

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

    }

Dies kommt etwas spät, dachte aber daran, die Antwort auf einfache Weise einzufügen Konvertieren von Liste in ArrayList.

Einfacher Weg

public static <T> ArrayList<T> listToArrayList(List<T> list) {
    return list != null ? new ArrayList<>(list) : null;
}

Klassischer Weg

public static  <T> ArrayList<T>  listToArrayList(List<T> list) {
    ArrayList<T> arrayList = new ArrayList<>();
    if (list != null) {
        for (int i = 0; i < list.size(); i++) {
            arrayList.add(list.get(i));
            i++;
        }
        // or simply
        // arrayList.addAll(list);
    }
    return  arrayList;
}

Verwendungszweck

listToArrayList(yourList);

1297970cookie-checkAufführen zu ArrayList Konvertierungsproblem

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy