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.
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.
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.