Problème de conversion de la liste vers ArrayList

J’ai une méthode suivante … qui prend la liste des phrases et divise chaque phrase en mots. Voici la:

public List getWords(List strSentences){ allWords = new ArrayList(); Iterator itrTemp = strSentences.iterator(); while(itrTemp.hasNext()){ Ssortingng strTemp = itrTemp.next(); allWords = Arrays.asList(strTemp.toLowerCase().split("\\s+")); } return allWords; } 

Je dois passer cette liste dans un hashmap dans un format suivant

 HashMap<String, ArrayList> 

donc cette méthode retourne List et j’ai besoin d’une arrayList? Si j’essaye de lancer ça ne marche pas … des suggestions?

De plus, si je change la liste de tableaux pour la liste 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?

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

Arrays.asList ne Arrays.asList pas de java.util.ArrayList , vous ne pouvez donc pas affecter la valeur de retour d’ Arrays.asList à une variable de type ArrayList .

Au lieu de:

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

Essaye ça:

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

La dissortingbution fonctionne lorsque l’instance réelle de la liste est une ArrayList . Si c’est, par exemple, un Vector (qui est une autre extension de List ), il lancera une exception ClassCastException.

L’erreur lors de la modification de la définition de votre HashMap est due au traitement ultérieur des éléments, et ce processus attend une méthode définie uniquement dans ArrayList . L’exception vous indique qu’elle n’a pas trouvé la méthode qu’elle recherchait.

Créez une nouvelle ArrayList avec le contenu de l’ancien.

 new ArrayList(myList); 

Jetez un coup d’oeil à ArrayList # addAll (Collection)

Ajoute tous les éléments de la collection spécifiée à la fin de cette liste, dans l’ordre dans lequel ils sont renvoyés par l’iterator de la collection spécifiée. Le comportement de cette opération n’est pas défini 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 n’est pas défini si la collection spécifiée est cette liste et que cette liste est vide.)

Donc, fondamentalement, vous pourriez utiliser

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

Arrays.asList ne Arrays.asList pas d’instance de java.util.ArrayList mais renvoie l’instance de java.util.Arrays.ArrayList .

Vous devrez convertir en ArrayList si vous souhaitez accéder à des informations spécifiques à ArrayList

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