Tengo un método siguiente ... que en realidad toma la lista de oraciones y divide cada oración en palabras. Aquí 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;
}
Tengo que pasar esta lista a un mapa hash en el siguiente formato
HashMap<String, ArrayList<String>>
entonces este método devuelve List y necesito un arrayList? Si intento lanzarlo no funciona ... ¿alguna sugerencia?
Además, si cambio ArrayList a List en un HashMap, obtengo
java.lang.UnsupportedOperationException
debido a esta línea en mi código
sentenceList.add(((Element)sentenceNodeList.item(sentenceIndex)).getTextContent());
¿Alguna sugerencia mejor?

UnsupportedOperationExceptionse debe a que elArrays.asListmétodo devuelve una lista de tamaño fijo respaldada por una matriz; no se puede modificar. La solución presentada aquí por @Jesper evitará eso.Cast funciona donde la instancia real de la lista es un
ArrayList. Si es, digamos, unaVector(que es otra extensión deList) lanzará una ClassCastException.El error al cambiar la definición de su HashMap se debe a que los elementos se procesan posteriormente, y ese proceso espera un método que se define solo en
ArrayList. La excepción le dice que no encontró el método que estaba buscando.Crea uno nuevo
ArrayListcon el contenido del anterior.new ArrayList<String>(myList);fuente
Eche un vistazo a ArrayList # addAll (Colección)
Entonces, básicamente, podrías usar
ArrayList<String> listOfStrings = new ArrayList<>(list.size()); listOfStrings.addAll(list);fuente
En Kotlin List se puede convertir en ArrayList pasándolo como un parámetro de constructor.
fuente
Arrays.asListno devuelve instancia dejava.util.ArrayListpero devuelve instancia dejava.util.Arrays.ArrayList.Deberá convertir a ArrayList si desea acceder a
ArrayListinformación específicaallWords.addAll(Arrays.asList(strTemp.toLowerCase().split("\\s+")));fuente
Enfoque probado y probado.
public static ArrayList<String> listToArrayList(List<Object> myList) { ArrayList<String> arl = new ArrayList<String>(); for (Object object : myList) { arl.add((String) object); } return arl; }fuente