我希望打印一个Stack<Integer>对象,就像Eclipse调试器做的那样(即[1,2,3…]),但打印它与out = "output:" + Stack不会返回这个好结果。
澄清一下,我说的是Java的内置集合,所以我不能重写它的toString()。
我怎样才能得到一个漂亮的可打印版本的堆栈?
我希望打印一个Stack<Integer>对象,就像Eclipse调试器做的那样(即[1,2,3…]),但打印它与out = "output:" + Stack不会返回这个好结果。
澄清一下,我说的是Java的内置集合,所以我不能重写它的toString()。
我怎样才能得到一个漂亮的可打印版本的堆栈?
当前回答
由Apache Commons项目提供的MapUtils类提供了一个MapUtils. debugprint方法,它将漂亮地打印你的地图。
其他回答
只是修改了前面的示例,以打印包含用户自定义对象的偶数集合。
public class ToStringHelper {
private static String separator = "\n";
public ToStringHelper(String seperator) {
super();
ToStringHelper.separator = seperator;
}
public static String toString(List<?> l) {
StringBuilder sb = new StringBuilder();
String sep = "";
for (Object object : l) {
String v = ToStringBuilder.reflectionToString(object);
int start = v.indexOf("[");
int end = v.indexOf("]");
String st = v.substring(start,end+1);
sb.append(sep).append(st);
sep = separator;
}
return sb.toString();
}
public static String toString(Map<?,?> m) {
StringBuilder sb = new StringBuilder();
String sep = "";
for (Object object : m.keySet()) {
String v = ToStringBuilder.reflectionToString(m.get(object));
int start = v.indexOf("[");
int end = v.indexOf("]");
String st = v.substring(start,end+1);
sb.append(sep).append(st);
sep = separator;
}
return sb.toString();
}
public static String toString(Set<?> s) {
StringBuilder sb = new StringBuilder();
String sep = "";
for (Object object : s) {
String v = ToStringBuilder.reflectionToString(object);
int start = v.indexOf("[");
int end = v.indexOf("]");
String st = v.substring(start,end+1);
sb.append(sep).append(st);
sep = separator;
}
return sb.toString();
}
public static void print(List<?> l) {
System.out.println(toString(l));
}
public static void print(Map<?,?> m) {
System.out.println(toString(m));
}
public static void print(Set<?> s) {
System.out.println(toString(s));
}
}
有两种方法可以简化工作。 1. 导入Gson库。 2. 使用Lombok。
它们都可以帮助您从对象实例创建String。Gson将解析你的对象,lombok将覆盖你的类对象toString方法。
我放了一个关于Gson prettyPrint的例子,我创建了一个helper类来打印对象和对象的集合。如果使用lombok,可以将类标记为@ToString并直接打印对象。
@Scope(value = "prototype")
@Component
public class DebugPrint<T> {
public String PrettyPrint(T obj){
Gson gson = new GsonBuilder().setPrettyPrinting().create();
return gson.toJson(obj);
}
public String PrettyPrint(Collection<T> list){
Gson gson = new GsonBuilder().setPrettyPrinting().create();
return list.stream().map(gson::toJson).collect(Collectors.joining(","));
}
}
使用java 8流和收集器可以轻松完成:
String format(Collection<?> c) {
String s = c.stream().map(Object::toString).collect(Collectors.joining(","));
return String.format("[%s]", s);
}
首先,我们使用map和Object::toString来创建Collection<String>,然后使用join collector来连接Collection中的每个项,作为分隔符。
对于Apache Commons 3,您希望调用
StringUtils.join(myCollection, ",")
由Apache Commons项目提供的MapUtils类提供了一个MapUtils. debugprint方法,它将漂亮地打印你的地图。