patrón07
Tengo el siguiente método… 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 hashmap en el siguiente formato
HashMap<String, ArrayList<String>>
Entonces, ¿este método devuelve List y necesito un ArrayList? Si trato de castear 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?
Cast funciona cuando la instancia real de la lista es un ArrayList
. Si es, digamos, un Vector
(que es otra extensión de List
) arrojará una ClassCastException.
El error al cambiar la definición de tu HashMap se debe a que luego se procesan los elementos, 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.
Crear un nuevo ArrayList
con el contenido del anterior.
new ArrayList<String>(myList);
En primer lugar, ¿por qué el mapa es un HashMap<String, ArrayList<String>>
y no un HashMap<String, List<String>>
? ¿Hay alguna razón por la cual el valor debe ser una implementación específica de la interfaz? List
(ArrayList
en este caso)?
Arrays.asList
no devuelve un java.util.ArrayList
por lo que no puede asignar el valor de retorno de Arrays.asList
a una variable de tipo ArrayList
.
En vez de:
allWords = Arrays.asList(strTemp.toLowerCase().split("\\s+"));
Prueba esto:
allWords.addAll(Arrays.asList(strTemp.toLowerCase().split("\\s+")));
-
Y en concreto el
UnsupportedOperationException
es causado porque elArrays.asList
El 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.–Duncan Jones
30 de octubre de 2012 a las 8:19
programador loco
Echa un vistazo a ArrayList#addAll(Colección)
Agrega todos los elementos de la colección especificada al final de esta lista, en el orden en que los devuelve el iterador de la colección especificada. El comportamiento de esta operación no está definido si la colección especificada se modifica mientras la operación está en curso. (Esto implica que el comportamiento de esta llamada no está definido si la colección especificada es esta lista y esta lista no está vacía).
Así que básicamente podrías usar
ArrayList<String> listOfStrings = new ArrayList<>(list.size());
listOfStrings.addAll(list);
En Kotlin List se puede convertir en ArrayList pasándolo como un parámetro de constructor.
ArrayList(list)
Amit Deshpande
Arrays.asList
no devuelve instancia de java.util.ArrayList
pero devuelve una instancia de java.util.Arrays.ArrayList
.
Deberá convertir a ArrayList si desea acceder ArrayList
Información específica
allWords.addAll(Arrays.asList(strTemp.toLowerCase().split("\\s+")));
s krishna
Enfoque probado y comprobado.
public static ArrayList<String> listToArrayList(List<Object> myList) {
ArrayList<String> arl = new ArrayList<String>();
for (Object object : myList) {
arl.add((String) object);
}
return arl;
}
Esto llega un poco tarde, pero pensé en ponerlo de una manera simple para la respuesta de Convirtiendo Lista a ArrayList.
Manera simple
public static <T> ArrayList<T> listToArrayList(List<T> list) {
return list != null ? new ArrayList<>(list) : null;
}
Manera clasica
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;
}
Uso
listToArrayList(yourList);