2012-06-14 6 views
7

Esta es mi primera pregunta sobre Stackoverflow, así que por favor tengan paciencia si encuentran algo sin sentido en mi primera publicación. Para su información, he revisado las Preguntas Frecuentes SO y conozco sus diversas políticas. Verá, soy un tipo que ha trabajado mucho con lenguajes como PHP, Perl, Python, ROR y recientemente he "cambiado de contexto" a Java EE. Usted ve, varios de los idiomas en los que he trabajado tenido un constructo que me permitió volcar de forma recursiva el contenido de una estructura de agregados sin por/foreach/bucle for..inVolcar recursivamente los contenidos de una estructura agregada (Colección, Matriz) en Java

Por ejemplo,

a = Any composite Data structure

PHP tiene

var_dump() and print_r()

Perl tiene

Data::Dumper

ROR tiene

PrettyPrint

y Python tiene

pprint module
.

Así que mi pregunta va,

¿Existe un equivalente de cualquiera de éstos en el universo de Java? Me parece muy conveniente cuando solía trabajar en cualquiera de estos idiomas (PHP/Perl/Python/ROR) para volcar el contenido de una estructura de datos compuesta para examinar cómo se ve y luego procesarlo más (o decidir sobre cómo procesarlo más)

Gracias por su tiempo y mis disculpas si mi publicación pasa por alto cualquier regla de SO.

+2

1) Bienvenido a SO. 2) Con respecto a su protocolo SO, lo único que hizo mal fue mencionar mucho sobre ser nuevo en SO. Sea directo y al grano con su pregunta: cuando alguien más busca el mismo tema, no se preocupan por la historia de su vida. :-) –

+0

Ok, Greg. Gracias :) –

Respuesta

1

Las colecciones tienen java.utiltoString() que recurrentemente volcar los detalles de la lista/set/mapa, etc. Esto requiere que el los objetos almacenados en la colección tienen toString() s útil definido.

Sin embargo, se rompe para las matrices, porque Java no tiene un valor predeterminado útil toString() para una matriz. Si sabe que está tratando con una matriz, puede usar el método de utilidad Arrays.deepToString() (consulte guido's response para obtener más información).

Por ejemplo, este código:

final Map<String, Object> map = new HashMap<String, Object>(); 
final List<String> nested = Arrays.asList("foo", "bar", "baz"); 

map.put("given", "Arthur"); 
map.put("family", "Dent"); 
map.put("nested", nested); 

System.out.println(map); 

produce esto:

{nested=[foo, bar, baz], given=Arthur, family=Dent} 
+0

Ok, esto resume tu respuesta y la anterior. No estoy seguro de cuál debería verificar verde :) Muchas gracias por responder. –

0

Se pueden utilizar los métodos estáticos de servicios públicos que se encuentran en la clase java.util.Arrays:

public static String toString(Object[] a) 
ie: String dump = Arrays.toString(array); 

Devuelve una cadena que representa el contenido de la matriz especificada.

Si la matriz contiene otras matrices como elementos, se convierten en cadenas mediante el método Object.toString() heredado de Object, que describe sus identidades en lugar de sus contenidos.

El valor devuelto por este método es igual al valor que Arrays.asList (a) .toString() devolvería, a menos que a sea nulo, en cuyo caso se devuelve "nulo".

public static String deepToString(Object[] a) 
ie: String dump = Arrays.deepToString(array); 

Devuelve una representación de cadena de los "contenidos profundos" de la matriz especificada. Si la matriz contiene otras matrices como elementos, la representación de la cadena contiene sus contenidos, etc. Este método está diseñado para convertir matrices multidimensionales en cadenas.

La representación de cadena consiste en una lista de elementos de la matriz, entre corchetes ("[]"). Los elementos adyacentes están separados por los caracteres "," (una coma seguida de un espacio). Los elementos se convierten en cadenas como String.valueOf (Object), a menos que sean ellos mismos arrays.

En caso de colletions, puede utilizar el método toArray():

List<YourObject> list = ..... 
YourObject[] array = list.toArray(new YourObject[0]); 
String dump = Arrays.deepToString(array); 
+0

Gracias! trabajó un encanto. –

0

Dependiendo de su propósito, que supongo que para depurar el código o explorar una estructura de datos compleja, no se imprimen.

Utilice un buen depurador UI como el que está en IntelliJ o (estremecimiento, no lo haga) eclipse. Java tiene un conjunto de herramientas mucho más maduro y completo disponible para los desarrolladores en comparación con los otros idiomas que enumeró (también trabajé en la mayoría de ellos). Php, Perl, etc. son primitivos y, por alguna razón, la gente sigue esperando desarrollarse en un simple editor de texto. Java no funciona de esa manera (al menos no si quiere mantenerse sano o si está trabajando en algo más grande que un proyecto de juguete).

Utilice un IDE con todas las funciones y está integrado en el depurador.

En los otros que enumeró, no hay una opción muy buena para un IDE y la integración de depuración es mala en el mejor de los casos ... Esta es una de las principales ventajas de Java, de hecho.

Cuestiones relacionadas