108 votes

Problème de conversion de List<String> en ArrayList<String>.

J'ai une méthode suivante... qui prend en fait la liste des phrases et divise chaque phrase en mots. La voici :

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

Je dois passer cette liste dans un hashmap au format suivant

HashMap<String, ArrayList<String>>

Cette méthode renvoie donc une liste et j'ai besoin d'une liste de tableaux ? Si j'essaie de faire un casting, ça ne marche pas... Des suggestions ?

De même, si je change ArrayList en List dans un HashMap, j'obtiens

java.lang.UnsupportedOperationException

à cause de cette ligne dans mon code

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

De meilleures suggestions ?

210voto

SJuan76 Points 16867

Cast fonctionne lorsque l'instance réelle de la liste est une ArrayList . S'il s'agit, par exemple, d'un Vector (qui est une autre extension de List ), une ClassCastException sera levée.

L'erreur lors de la modification de la définition de votre HashMap est due au fait que les éléments sont traités ultérieurement, et que ce processus attend une méthode qui n'est définie qu'en ArrayList . L'exception vous indique qu'elle n'a pas trouvé la méthode qu'elle cherchait.

Créer un nouveau ArrayList avec le contenu de l'ancien.

new ArrayList<String>(myList);

55voto

Jesper Points 65733

Tout d'abord, pourquoi la carte est un HashMap<String, ArrayList<String>> et non un HashMap<String, List<String>> ? Y a-t-il une raison pour laquelle la valeur doit être une implémentation spécifique de l'interface List ( ArrayList dans ce cas) ?

Arrays.asList ne renvoie pas un java.util.ArrayList Vous ne pouvez donc pas assigner la valeur de retour de la fonction Arrays.asList à une variable de type ArrayList .

Au lieu de :

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

Essayez ça :

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

46voto

MadProgrammer Points 161522

Jetez un coup d'œil à ArrayList#addAll(Collection)

Ajoute tous les éléments de la collection spécifiée à la fin du fichier de cette liste, dans l'ordre où ils sont retournés par la par l'itérateur de la collection spécifiée. Le comportement de cette opération est indéfini si si la collection spécifiée est modifiée pendant que l'opération est en cours. (Cela implique que le comportement de cet appel est indéfini si la collection spécifiée est cette liste, et cette liste est non vide).

Donc, en gros, vous pourriez utiliser

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

20voto

Shahab Rauf Points 358

En Kotlin, List peut être converti en ArrayList en le passant comme paramètre du constructeur.

ArrayList(list)

5voto

AmitD Points 12541

Arrays.asList ne renvoie pas d'instance de java.util.ArrayList mais il renvoie une instance de java.util.Arrays.ArrayList .

Vous devrez convertir en ArrayList si vous voulez accéder à ArrayList information spécifique

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X