Je souhaite imprimer un Stack<Integer>
objet aussi bien que le débogueur Eclipse (c'est-à-dire [1,2,3...]
) mais l'imprimer avec out = "output:" + stack
ne renvoie pas ce joli résultat.
Juste pour clarifier, je parle de la collection intégrée de Java, donc je ne peux pas la remplacer toString()
.
Comment puis-je obtenir une belle version imprimable de la pile?
java
debugging
pretty-print
Elazar Leibovich
la source
la source
AbstractCollection@toString
(et doncString + Stack
) l'imprime déjà comme vous le souhaitez.Réponses:
Vous pouvez le convertir en un tableau puis l'imprimer avec
Arrays.toString(Object[])
:la source
stack.toArray()
pourrait être très cher, cpu, temps et mémoire. une solution qui itère sur la collection d'origine / itérable serait probablement moins consommatrice de ressources.(Java 8)
la source
yourCollection.stream().map( o -> o.toString() ).collect( joining(",") ))
est mieux car vous le lisez de gauche à droite, vous n'avez pas besoin de regarder en arrière pour calculer dans votre cerveau ce qui est fait avec la liste intermédiaireAvec les flux et les collecteurs java 8, cela peut être fait facilement:
nous utilisons d'abord
map
avecObject::toString
pour créerCollection<String>
, puis utilisons le collecteur de jonction pour joindre chaque élément de la collection avec,
comme délimiteur.la source
Collections.toString(stack)
serait facile.La classe MapUtils offerte par le projet Apache Commons propose une
MapUtils.debugPrint
méthode qui imprimera joliment votre carte.la source
System.out.println (Collection c) imprime déjà tout type de collection au format lisible. Uniquement si la collection contient des objets définis par l'utilisateur, vous devez implémenter toString () dans la classe définie par l'utilisateur pour afficher le contenu.
la source
Implémentez toString () sur la classe.
Je recommande Apache Commons ToStringBuilder pour rendre cela plus facile. Avec lui, il vous suffit d'écrire ce genre de méthode:
Afin d'obtenir ce type de sortie:
Il existe également une mise en œuvre réfléchie .
la source
La goyave ressemble à une bonne option:
Iterables.toString(myIterable)
la source
Je suis d'accord avec les commentaires ci-dessus sur le remplacement
toString()
de vos propres classes (et sur l'automatisation de ce processus autant que possible).Pour les classes que vous n'avez pas définies , vous pouvez écrire une
ToStringHelper
classe avec une méthode surchargée pour chaque classe de bibliothèque que vous souhaitez gérer selon vos goûts:EDIT: En réponse au commentaire de xukxpvfzflbbld, voici une implémentation possible pour les cas mentionnés précédemment.
Ce n'est pas une implémentation complète, mais juste un démarreur.
la source
Vous pouvez utiliser la classe "Objects" de JAVA (disponible depuis la 1.7)
Sortie: 1273, 123, 876, 897
Une autre possibilité consiste à utiliser la classe "MoreObjects" de Google Guave , qui fournit de nombreuses fonctions d'aide utiles:
Sortie: NameOfYourObject = [1273, 123, 876, 897]
Documents sur la goyave
la source
Objects.toString()
fait juste appeltoString()
à la collection. Dans votre exemple, cela fonctionne parce que, vraisemblablement,toString()
sur la collection basée sur un tableau, il est assez joli d'imprimer.Avec Apache Commons 3 , vous souhaitez appeler
la source
Dans Java8
ou
la source
Juste modifié l'exemple précédent pour imprimer même une collection contenant des objets définis par l'utilisateur.
la source
la plupart des collections ont une utilité
toString()
en java de nos jours (Java7 / 8). Il n'est donc pas nécessaire de faire des opérations de flux pour concaténer ce dont vous avez besoin, il suffit de remplacertoString
votre classe de valeur dans la collection et vous obtenez ce dont vous avez besoin.à la fois AbstractMap et AbstractCollection mettre en œuvre toString () en appelant toString par élément.
ci-dessous est une classe de test pour montrer le comportement.
la source
JSON
Une solution alternative pourrait être de convertir votre collection au format JSON et d'imprimer la chaîne Json. L'avantage est une chaîne d'objet bien formatée et lisible sans avoir besoin d'implémenter le
toString()
.Exemple utilisant Gson de Google :
la source
S'il s'agit de votre propre classe de collection plutôt que d'une classe intégrée, vous devez remplacer sa méthode toString. Eclipse appelle cette fonction pour tous les objets pour lesquels elle n'a pas de formatage câblé.
la source
Soyez prudent lorsque vous appelez Sop on Collection, cela peut lever
ConcurrentModification
Exception. Parce que latoString
méthode interne de chaque collection appelle en interneIterator
la collection.la source
Devrait fonctionner pour n'importe quelle collection sauf
Map
, mais il est également facile à prendre en charge. Modifiez le code pour passer ces 3 caractères en arguments si nécessaire.la source
Vous pouvez essayer d'utiliser
la source
Il existe deux façons de simplifier votre travail. 1. importez la bibliothèque Gson. 2. utilisez Lombok.
Les deux vous aident à créer une chaîne à partir d'une instance d'objet. Gson analysera votre objet, lombok remplacera votre objet classe par la méthode toString.
Je mets un exemple sur Gson prettyPrint, je crée une classe d'assistance pour imprimer un objet et une collection d'objets. Si vous utilisez lombok, vous pouvez marquer votre classe comme @ToString et imprimer votre objet directement.
}
la source