我希望打印一个Stack<Integer>对象,就像Eclipse调试器做的那样(即[1,2,3…]),但打印它与out = "output:" + Stack不会返回这个好结果。
澄清一下,我说的是Java的内置集合,所以我不能重写它的toString()。
我怎样才能得到一个漂亮的可打印版本的堆栈?
我希望打印一个Stack<Integer>对象,就像Eclipse调试器做的那样(即[1,2,3…]),但打印它与out = "output:" + Stack不会返回这个好结果。
澄清一下,我说的是Java的内置集合,所以我不能重写它的toString()。
我怎样才能得到一个漂亮的可打印版本的堆栈?
当前回答
system . out。println(集合c)已经以可读格式打印任何类型的集合。只有当集合包含用户定义的对象时,才需要在用户定义的类中实现toString()来显示内容。
其他回答
番石榴看起来是个不错的选择:
Iterables.toString (myIterable)
你可以使用JAVA中的“Objects”类(从1.7开始就有了)
Collection<String> myCollection = Arrays.asList("1273","123","876","897");
Objects.toString(myCollection);
输出:1273,123,876,897
另一种可能是使用谷歌Guave中的"MoreObjects"类,它提供了许多有用的帮助函数:
MoreObjects.toStringHelper(this).add("NameOfYourObject", myCollection).toString());
输出: yourobject =[1273, 123,876, 897]
番石榴文档
有两种方法可以简化工作。 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(","));
}
}
在类上实现toString()。
我推荐使用Apache Commons ToStringBuilder来简化这个过程。使用它,你只需要写这样的方法:
public String toString() {
return new ToStringBuilder(this).
append("name", name).
append("age", age).
toString();
}
为了得到这样的输出:
Person@7f54 [name =斯蒂芬,age = 29]
还有一个反射实现。
如果这是您自己的集合类,而不是内置的集合类,则需要重写其toString方法。Eclipse对没有固定格式的任何对象调用该函数。