la conversion des éléments d'une liste de chaîne de caractères
Je voudrais obtenir la chaîne de texte des éléments stockés dans une liste, dire List<Car>. Serait le toArray() et toString() les méthodes les meilleures options?
Oui, mais de le faire manuellement vous donne plus de contrôle:
//initialize with the exact lengthList<String> stringsList =newArrayList<String>(listOfCars.size());for(Car car : listOfCars){
stringsList.add(car.toString());}
Si vous n'avez pas remplacé la toString() méthode ou ne veulent pas en tenir compte, vous pouvez utiliser car.getName() au lieu de car.toString() (ou de toute propriété la combinaison qui vous plaît)
Fournir vous n'avez pas d'objet à la sortie de chaîne à la suite de la convention:
[A, B, C]
... vous pouvez simplement appeler la List'stoString() méthode pour obtenir votre sortie (je ne sais pas pourquoi les gens préconisent l'utilisation d'une boucle pour cela). Il peut également être judicieux de remplacer la Voiture toString() méthode de retour d'un homme convivial description de l'objet.
Cependant, si vous souhaitez obtenir chaque élément comme un individu String vous aurez besoin d'itérer sur la Liste d'un élément à la fois.
Comment pouvez-vous être sûr que la sortie doit ressembler à cela? La liste est juste une interface et il n'y a pas de contrat sur la sortie de la méthode toString() dans la Liste. C'est juste un point, mais je suppose que dans 99,9% des cas, les gens ont tendance à utiliser le JDK implémentations de la Liste, qui ne produisent pas de ce style de sortie. J'ai tendance à utiliser cette sortie pour l'enregistrement de débogage, mais ne serait jamais compter sur elle pour la présentation de la logique. Cette approche est la bonne à mon humble avis qu'il vient de AbstractCollection#toString dont la mise en œuvre doit s'étendre de et types de collection dans le JDK.
Il y a un static toString(Object[]) méthode java.util.Arrays. Appelant à l' toArray() suite de la Liste (comme vous l'avez suggéré) devrait faire l'affaire.
Pourquoi ne pas simplement appeler toString() sur la liste? L'interface Liste ne permet pas de définir un contrat pour toString().
List<Car> carList =newArrayList<>();//Add some elemts to carList
carList.stream().map(Car::toString)//maps Car Object to a value returned by toString method.collect(Collectors.joining(","));
Reportez-vous JavaDoc sur Collectors pour plus d'info.
J'ai posté quelques exemples de plus de Collectionneurs.l'adhésion() dans une autre réponse. C'était un peu beaucoup pour un edit! N'hésitez pas à copier ma réponse dans le vôtre, donc il est dans un endroit, si vous le souhaitez. Je vais donc supprimer ma réponse.
Je ne veux pas donner une réponse distincte de hkbharath, ce qui est une bonne réponse, mais je ne veux pas donner plus d'exemples de l'aide de Java 8 ruisseaux. Les Collecteurs.l'adhésion() est un peu différente surchargé variantes.
Disons que le code dans son exemple:
carList.stream().map(Car::toString)//maps Car Object to a value returned by toString method.collect(Collectors.joining(","));
Vous donne ceci: Ford,Honda,Buick
Si vous n'avez pas besoin d'un délimiteur:
carList.stream().map(Car::toString)//maps Car Object to a value returned by toString method.collect(Collectors.joining());
Vous donnerait plutôt: FordHondaBuick
Et voici un exemple montrant comment manipuler chaque chaîne, changer le séparateur, et ajouter un préfixe et suffixe:
carList.stream().map(Car::toString)//maps Car Object to a value returned by toString method.map(String::toUpperCase)//Transform to upper case.collect(Collectors.joining("; ","[","]"));
La méthode toString() doit être remplacée pour le retour d'information utile à propos de l'objet dans le formulaire de chaîne.
Dans votre cas, je pense que le sens d'info serait tous les détails de la voiture. Donc, substituant la méthode toString() est la meilleure approche au lieu d'utiliser getCarName() ou des méthodes similaires.
Oui, mais de le faire manuellement vous donne plus de contrôle:
Si vous n'avez pas remplacé la
toString()
méthode ou ne veulent pas en tenir compte, vous pouvez utilisercar.getName()
au lieu decar.toString()
(ou de toute propriété la combinaison qui vous plaît)OriginalL'auteur Bozho
Une autre idée est d'utiliser le Apache Commons Lang d'écrire le code suivant:
L'intérêt est que vous pouvez également fournir un séparateur, par exemple:
OriginalL'auteur Romain Linsolas
Fournir vous n'avez pas d'objet à la sortie de chaîne à la suite de la convention:
... vous pouvez simplement appeler la
List
'stoString()
méthode pour obtenir votre sortie (je ne sais pas pourquoi les gens préconisent l'utilisation d'une boucle pour cela). Il peut également être judicieux de remplacer la VoituretoString()
méthode de retour d'un homme convivial description de l'objet.Cependant, si vous souhaitez obtenir chaque élément comme un individu
String
vous aurez besoin d'itérer sur la Liste d'un élément à la fois.C'est juste un point, mais je suppose que dans 99,9% des cas, les gens ont tendance à utiliser le JDK implémentations de la Liste, qui ne produisent pas de ce style de sortie. J'ai tendance à utiliser cette sortie pour l'enregistrement de débogage, mais ne serait jamais compter sur elle pour la présentation de la logique.
Cette approche est la bonne à mon humble avis qu'il vient de AbstractCollection#toString dont la mise en œuvre doit s'étendre de et types de collection dans le JDK.
OriginalL'auteur Adamski
Il y a un
static toString(Object[])
méthodejava.util.Arrays
. Appelant à l'toArray()
suite de la Liste (comme vous l'avez suggéré) devrait faire l'affaire.L'interface Liste ne permet pas de définir un contrat pour toString().
OriginalL'auteur Dominik
Vous pouvez utiliser Java 8
Streams
Reportez-vous JavaDoc sur
Collectors
pour plus d'info.OriginalL'auteur hkbharath
D'abord convertir votre Liste (Collection) pour un tableau, et de créer une chaîne de chaque élément.
OriginalL'auteur UnixShadow
Je ne veux pas donner une réponse distincte de hkbharath, ce qui est une bonne réponse, mais je ne veux pas donner plus d'exemples de l'aide de Java 8 ruisseaux. Les Collecteurs.l'adhésion() est un peu différente surchargé variantes.
Disons que le code dans son exemple:
Vous donne ceci: Ford,Honda,Buick
Si vous n'avez pas besoin d'un délimiteur:
Vous donnerait plutôt: FordHondaBuick
Et voici un exemple montrant comment manipuler chaque chaîne, changer le séparateur, et ajouter un préfixe et suffixe:
Vous donnerait plutôt: [FORD; HONDA; BUICK]
OriginalL'auteur drrob
Remarque: ci-dessus affiche le message signicatif uniquement lorsque vous avez remplacé la méthode toString() de la classe de Voiture.
e.g
La méthode toString() doit être remplacée pour le retour d'information utile à propos de l'objet dans le formulaire de chaîne.
Dans votre cas, je pense que le sens d'info serait tous les détails de la voiture. Donc, substituant la méthode toString() est la meilleure approche au lieu d'utiliser getCarName() ou des méthodes similaires.
OriginalL'auteur Yatendra Goel