Pourquoi voulez-vous faire cela? Je veux dire, ce n'est pas sûr. Jetez un œil à l'exemple.
athspk
6
Vous mettez des non-chaînes dans la liste. Qu'attendez-vous de ce qui se passe si vous les forcez à être des cordes?
Ben Zotto
5
Je suppose que vous vouliez dire: ArrayList <String> list2 = (ArrayList <String>) liste;
Costi Ciudatu
Réponses:
130
Comme il ne s'agit en fait pas d'une liste de chaînes, le moyen le plus simple est de la boucler et de convertir vous-même chaque élément en une nouvelle liste de chaînes:
J'aime la façon dont les valeurs nulles sont conservées dans cette implémentation.
4
Si vous utilisez String.valueOf(object), vous n'aurez pas à faire la object != null ? object.toString() : nullchose
user219882
2
@Tomas: cela ajouterait une chaîne avec une valeur "null"au lieu du littéral null. Cela dépend en outre des exigences de l'entreprise, que ce soit souhaitable ou non. Pour moi, cela n'aurait pas du tout été acceptable car cela introduit un bug potentiellement majeur.
BalusC
1
@Tomas: "null"pas nulldu tout. Le nulla une signification particulière en Java. Cela n'a aucun sens d'être obligé de le faire if (item.equals("null"))lors de la vérification de cela par la suite.
BalusC
1
@Tomas: vous ne battez que la forte nature de frappe de Java de cette façon. Mais comme indiqué, cela dépend des exigences de l'entreprise si cela est souhaitable. Pour moi, c'est tout simplement inacceptable. Faites ce que vous voulez et le temps vous enseignera :)
BalusC
18
Ce n'est pas sûr de faire ça!
Imaginez si vous aviez:
ArrayList<Object> list =newArrayList<Object>();
list.add(newEmployee("Jonh"));
list.add(newCar("BMW","M3"));
list.add(newChocolate("Twix"));
Cela n'aurait aucun sens de convertir la liste de ces objets en n'importe quel type.
Sauf s'ils ont Object#toString()remplacé la méthode. Cependant, toute la conversion de type de X en String à d'autres fins que la présentation humaine n'a en effet pas beaucoup de sens.
BalusC
13
Si vous voulez le faire de manière sale, essayez ceci.
Avec Java Generics Prend une liste de X et renvoie une liste de T qui étend ou implémente X, Sweet!
// the cast is is actually checked via the method API@SuppressWarnings("unchecked")publicstatic<T extends X, X>ArrayList<T> convertToClazz(ArrayList<X> from,Class<X> inClazz,Class<T> outClazz){ArrayList<T> to =newArrayList<T>();for(X data : from){
to.add((T) data);}return to;}
Réponses:
Comme il ne s'agit en fait pas d'une liste de chaînes, le moyen le plus simple est de la boucler et de convertir vous-même chaque élément en une nouvelle liste de chaînes:
Ou lorsque vous n'êtes pas encore sur Java 8:
Ou lorsque vous n'êtes pas encore sur Java 7:
Notez que vous devez déclarer par rapport à l'interface (
java.util.List
dans ce cas), pas à l'implémentation.la source
String.valueOf(object)
, vous n'aurez pas à faire laobject != null ? object.toString() : null
chose"null"
au lieu du littéralnull
. Cela dépend en outre des exigences de l'entreprise, que ce soit souhaitable ou non. Pour moi, cela n'aurait pas du tout été acceptable car cela introduit un bug potentiellement majeur."null"
pasnull
du tout. Lenull
a une signification particulière en Java. Cela n'a aucun sens d'être obligé de le faireif (item.equals("null"))
lors de la vérification de cela par la suite.Ce n'est pas sûr de faire ça!
Imaginez si vous aviez:
Cela n'aurait aucun sens de convertir la liste de ces objets en n'importe quel type.
la source
Object#toString()
remplacé la méthode. Cependant, toute la conversion de type de X en String à d'autres fins que la présentation humaine n'a en effet pas beaucoup de sens.Si vous voulez le faire de manière sale, essayez ceci.
Avantage: ici vous gagnez du temps en n'itérant pas sur tous les objets.
Inconvénient: peut produire un trou dans votre pied.
la source
Utilisation de la goyave :
la source
En utilisant Java 8, vous pouvez faire:
la source
Vous pouvez utiliser un caractère générique pour le faire comme suit
la source
Voici une autre alternative utilisant Guava
la source
Votre code
ArrayList<String> list2 = (String)list;
ne se compile pas car illist2
n'est pas de typeString
. Mais ce n'est pas le seul problème.la source
Utilisation de Java 8 lambda:
la source
Avec Java Generics Prend une liste de X et renvoie une liste de T qui étend ou implémente X, Sweet!
la source
Une solution simple:
Remarque: cela fonctionne lorsque la liste contient tous les éléments du type de données String.
la source