web-dev-qa-db-fra.com

Répertoriez le problème de conversion entre <String> vers ArrayList <String>

J'ai une méthode suivante ... qui prend en fait la liste des phrases et scinde chaque phrase en mots. Le 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 dans un format suivant

HashMap<String, ArrayList<String>>

donc cette méthode retourne List et j'ai besoin d'un tableauListe? Si j'essaie de le lancer, ça ne marche pas ... des suggestions?

De plus, si je change la liste de tableaux en liste dans un tableau de hachage, je reçois

Java.lang.UnsupportedOperationException

à cause de cette ligne dans mon code

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

De meilleures suggestions?

75
Skipper07

Tout d’abord, pourquoi la carte est-elle un HashMap<String, ArrayList<String>> et non un HashMap<String, List<String>>? Existe-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 de Java.util.ArrayList, vous ne pouvez donc pas affecter la valeur de retour de 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+")));
43
Jesper

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

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

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

new ArrayList<String>(myList);
159
SJuan76

Jetez un 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'itérateur 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 n'est pas vide.)

Donc, fondamentalement, vous pouvez utiliser

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

Arrays.asList ne renvoie pas d'instance de Java.util.ArrayList mais renvoie une instance de _Java.util.Arrays.ArrayList_.

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

_allWords.addAll(Arrays.asList(strTemp.toLowerCase().split("\\s+")));
_
5
Amit Deshpande

Dans Kotlin List peut être converti en ArrayList en le passant en tant que paramètre constructeur.

ArrayList(list)
4
Shahab Rauf