Deseo imprimir un Stack<Integer>
objeto tan bien como lo hace el depurador Eclipse (es decir [1,2,3...]
), pero imprimirlo out = "output:" + stack
no devuelve este buen resultado.
Solo para aclarar, estoy hablando de la colección incorporada de Java, así que no puedo anularla toString()
.
¿Cómo puedo obtener una buena versión imprimible de la pila?
java
debugging
pretty-print
Elazar Leibovich
fuente
fuente
AbstractCollection@toString
(y por lo tantoString + Stack
) ya lo imprime como lo desea.Respuestas:
Puede convertirlo en una matriz y luego imprimirlo con
Arrays.toString(Object[])
:fuente
stack.toArray()
puede ser muy costoso, cpu, tiempo y memoria sabio. Una solución que itera sobre la colección original / iterable probablemente consumiría menos recursos.(Java 8)
fuente
yourCollection.stream().map( o -> o.toString() ).collect( joining(",") ))
es mejor porque lo lees de izquierda a derecha, no necesitas mirar hacia atrás para calcular en tu cerebro lo que se hace con la lista intermediaCon java 8 streams y recopiladores se puede hacer fácilmente:
primero usamos
map
conObject::toString
para crearCollection<String>
y luego usamos unir colector para unir cada elemento de la colección con un,
delimitador.fuente
Collections.toString(stack)
sería fácil.La clase MapUtils ofrecida por el proyecto Apache Commons ofrece un
MapUtils.debugPrint
método que imprimirá bastante su mapa.fuente
System.out.println (Colección c) ya imprime cualquier tipo de colección en formato legible. Solo si la colección contiene objetos definidos por el usuario, debe implementar toString () en la clase definida por el usuario para mostrar el contenido.
fuente
Implemente toString () en la clase.
Recomiendo el Apache Commons ToStringBuilder para hacer esto más fácil. Con él, solo tienes que escribir este tipo de método:
Para obtener este tipo de salida:
También hay una implementación reflexiva .
fuente
La guayaba parece una buena opción:
Iterables.toString(myIterable)
fuente
Estoy de acuerdo con los comentarios anteriores sobre anular
toString()
en sus propias clases (y sobre automatizar ese proceso tanto como sea posible).Para las clases que no definió, puede escribir una
ToStringHelper
clase con un método sobrecargado para cada clase de biblioteca que desee manejar según sus propios gustos:EDITAR: respondiendo al comentario de xukxpvfzflbbld, aquí hay una posible implementación para los casos mencionados anteriormente.
Esta no es una implementación completa, sino solo un comienzo.
fuente
Puede usar la clase "Objetos" de JAVA (que está disponible desde 1.7)
Salida: 1273, 123, 876, 897
Otra posibilidad es usar la clase "MoreObjects" de Google Guave , que proporciona muchas funciones útiles de ayuda:
Salida: NameOfYourObject = [1273, 123, 876, 897]
Documentos de guayaba
fuente
Objects.toString()
solo llamatoString()
a la colección. En su ejemplo, esto funciona porque presumiblementetoString()
en la colección respaldada por arreglos se imprime muy bien.Con Apache Commons 3 , quieres llamar
fuente
En Java8
o
fuente
Acaba de modificar el ejemplo anterior para imprimir incluso colecciones que contienen objetos definidos por el usuario.
fuente
La mayoría de las colecciones tienen una utilidad
toString()
en Java en estos días (Java7 / 8). Por lo tanto, no es necesario realizar operaciones continuas para concatenar lo que necesita, simplemente anuletoString
su clase de valor en la colección y obtendrá lo que necesita.tanto AbstractMap y AbstractCollection implementan toString () llamando a toString por elemento.
a continuación hay una clase de prueba para mostrar el comportamiento.
fuente
JSON
Una solución alternativa podría ser convertir su colección en formato JSON e imprimir Json-String. La ventaja es un Object-String bien formateado y legible sin necesidad de implementar el
toString()
.Ejemplo usando el Gson de Google :
fuente
Si esta es su propia clase de colección en lugar de una clase integrada, debe anular su método toString. Eclipse llama a esa función para cualquier objeto para el que no tiene un formato cableado.
fuente
Tenga cuidado al llamar a Sop en Collection, puede lanzar
ConcurrentModification
Exception. Porque eltoString
método interno de cada Colección internamente llamaIterator
a la Colección.fuente
Debería funcionar para cualquier colección excepto
Map
, pero también es fácil de soportar. Modifique el código para pasar estos 3 caracteres como argumentos si es necesario.fuente
Puedes intentar usar
fuente
Hay dos formas de simplificar su trabajo. 1. importar la biblioteca de Gson. 2. usa Lombok.
Ambos te ayudan a crear String desde la instancia del objeto. Gson analizará su objeto, lombok anulará su objeto de clase al método String.
Pongo un ejemplo sobre Gson prettyPrint, creo una clase auxiliar para imprimir objetos y colecciones de objetos. Si está utilizando lombok, puede marcar su clase como @ToString e imprimir su objeto directamente.
}
fuente