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?
UnsupportedOperationException
se debe a que elArrays.asList
mé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
ArrayList
con 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.asList
no devuelve instancia dejava.util.ArrayList
pero devuelve instancia dejava.util.Arrays.ArrayList
.Deberá convertir a ArrayList si desea acceder a
ArrayList
informació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