如何在Java中打印指向数组的对象
我有一张地图,定义如下如何在Java中打印指向数组的对象,java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,我有一张地图,定义如下 HashMap<Object, Object> hashMap; 我实际上是在复制Arrays.deepToString()的功能。但是我找不到一种只使用Arrays.toString()或Arrays.deepToString()的方法 这是解决问题的正确方法,还是有什么办法让这些标准方法对我有效 任何帮助都会很好。如果您将数组转换为列表,然后使用toString呢- Arrays.asList(数组) 您需要以这种方式编写助手方法- private St
HashMap<Object, Object> hashMap;
我实际上是在复制Arrays.deepToString()
的功能。但是我找不到一种只使用Arrays.toString()
或Arrays.deepToString()的方法
这是解决问题的正确方法,还是有什么办法让这些标准方法对我有效
任何帮助都会很好。如果您将数组转换为列表,然后使用toString呢-
Arrays.asList(数组)
您需要以这种方式编写助手方法-
private String convertToHumanReadableFormat(Object value) {
if (value == null) return "N/A";
if (value.getClass().isArray()) {
value = Arrays.asList((Object[])value);
}
return value.toString();
}
要处理原语,首先需要手动将数组转换为列表-
private String convertToHumanReadableFormat(Object value) {
if (value == null) return "N/A";
if (value.getClass().isArray()) {
//convert array to list
int count = Array.getLength(value);
ArrayList<Object> list = new ArrayList<Object>();
for(int i=0; i<count; i++){
list.add(Array.get(value, i));
}
return list.toString(); //or value=list;
}
return value.toString();
}
私有字符串转换为HumanReadableFormat(对象值){
如果(value==null)返回“不适用”;
if(value.getClass().isArray()){
//将数组转换为列表
int count=Array.getLength(值);
ArrayList=新建ArrayList();
对于(inti=0;i来说,如果将数组转换为list,然后使用toString呢-
Arrays.asList(数组)
您需要以这种方式编写助手方法-
private String convertToHumanReadableFormat(Object value) {
if (value == null) return "N/A";
if (value.getClass().isArray()) {
value = Arrays.asList((Object[])value);
}
return value.toString();
}
要处理原语,首先需要手动将数组转换为列表-
private String convertToHumanReadableFormat(Object value) {
if (value == null) return "N/A";
if (value.getClass().isArray()) {
//convert array to list
int count = Array.getLength(value);
ArrayList<Object> list = new ArrayList<Object>();
for(int i=0; i<count; i++){
list.add(Array.get(value, i));
}
return list.toString(); //or value=list;
}
return value.toString();
}
私有字符串转换为HumanReadableFormat(对象值){
如果(value==null)返回“不适用”;
if(value.getClass().isArray()){
//将数组转换为列表
int count=Array.getLength(值);
ArrayList=新建ArrayList();
对于(int i=0;i)有几种方法可以考虑——
答:如果您对格式不太严格,只想以人类可读的方式打印HashMap内容,我建议您使用JSon序列化-如果输出是人类可读的话。
您可以看到我们在开源项目(克隆引擎项目的git repo)中所做的事-engine\backend\manager\modules\utils\src\main\java\org\ovirt\engine\core\utils\serialization\json-查看那里的JsonObjectSerializer类。
B.如果对格式要求严格,则应获取地图的入口集,对其进行迭代,并将对象插入ArrayList。然后,可以使用toArray()方法返回数组,并使用上述方法。
请注意,我建议您的ARAYLIST将是一个字符串数组,因此必须使用每个MaScript并将其转换为字符串,并考虑toString(),看看它产生的格式是否足够好。
< P> >您可以考虑几种方法-BR>
答:如果您对格式不太严格,只想以人类可读的方式打印HashMap内容,我建议您使用JSon序列化-如果输出是人类可读的话。
您可以看到我们在开源项目(克隆引擎项目的git repo)中所做的事-engine\backend\manager\modules\utils\src\main\java\org\ovirt\engine\core\utils\serialization\json-查看那里的JsonObjectSerializer类。
B.如果对格式要求严格,则应获取地图的入口集,对其进行迭代,并将对象插入ArrayList。然后,可以使用toArray()方法返回数组,并使用上述方法。
请注意,我建议您的ARAYLIST将是一个字符串数组,因此必须使用每个MaScript并将其转换为字符串,考虑toString()。看看它产生的格式是否适合您。
如果您的用例是以人类可读的形式呈现数组和其他对象图,那么您可以选择模板化解决方案(如freemarker的速度)或将其转换为JSON(或XML)和rpetty-pring-it,我建议使用GSON/XStream来完成此任务
如果您希望将其用于调试目的,那么只需坚持使用日志系统并使用那里可用的标准转换器(例如在log4j中)如果您的用例是以人类可读的形式呈现数组和其他对象图,您可以使用模板解决方案(如freemarker的速度)或将其转换为JSON(或XML)我建议使用GSON/XStream来完成这项任务
如果您想将其用于调试目的,那么只需坚持使用日志系统,并使用那里可用的标准转换器(例如在log4j中)请将方法convertToHumanReadableFormat
修改为以下内容。我已经对其进行了测试,它确实起到了作用
private <T> String convertToHumanReadableFormat(Object value) {
if (value == null) return "N/A";
if (value.getClass().isArray()) {
if( value instanceof int[]||value instanceof long[]){
List<T> list = new ArrayList<T>();
list.addAll((Collection<? extends T>) Arrays.asList(value));
return convertToHumanReadableFormat(list.toArray());
}else{
return Arrays.deepToString((Object[]) value);
}
}
return value.toString();
}
私有字符串转换为HumanReadableFormat(对象值){
如果(value==null)返回“不适用”;
if(value.getClass().isArray()){
if(int[]的值instanceof | | long[]的值instanceof){
列表=新的ArrayList();
list.addAll((Collection请将方法convertToHumanReadableFormat
修改为以下内容。我已经对它进行了测试,它确实有效
private <T> String convertToHumanReadableFormat(Object value) {
if (value == null) return "N/A";
if (value.getClass().isArray()) {
if( value instanceof int[]||value instanceof long[]){
List<T> list = new ArrayList<T>();
list.addAll((Collection<? extends T>) Arrays.asList(value));
return convertToHumanReadableFormat(list.toArray());
}else{
return Arrays.deepToString((Object[]) value);
}
}
return value.toString();
}
私有字符串转换为HumanReadableFormat(对象值){
如果(value==null)返回“不适用”;
if(value.getClass().isArray()){
if(int[]的值instanceof | | long[]的值instanceof){
列表=新的ArrayList();
list.addAll((Collection您可以使用九个instanceof语句来调用适当的toString或deepToString方法。如果您使用自己的代码,请记住使用StringBuilder,并考虑数组包含对自身或父维度的引用的可能性。当前,您的代码将递归,直到堆栈溢出。使用正如我建议的那样,instanceof还可以避免代码中固有的原始值装箱(从而提高性能)
if (val instanceof Object[]) return Arrays.deepToString((Object[]) val);
if (val instanceof byte[]) return Arrays.toString((byte[]) val);
// Repeat for other 7 array types...
您可以只使用九条instanceof语句来调用适当的toString或deepToString方法。如果您使用自己的代码,请记住使用StringBuilder,并考虑数组包含对自身或父维度的引用的可能性。当前,您的代码将