62,635
社区成员




public static <T> List<T> extractedList(Object o) {
// 创建返回对象
List<T> result = new ArrayList<T>();
// 判断对象是否数组
if (o.getClass().isArray()) {
// 是数组,则遍历
for (int i = 0; i < Array.getLength(o); i++) {
// 递归,不是数组将返回加入到列表尾,是则继续递归
result.add((T) extractedList(Array.get(o, i)));
}
} else {
// 加入对象到列表
result.add((T) o);
}
// 返回数组列表
return result;// new ArrayList<T>(result);
}
String[][] menuListtest = new String[][] { { "name1", "text1", "cmd1", "key1" },
{ "name2", "text2", "cmd2", "key2" } };
[[[name1], [text1], [cmd1], [key1]], [[name2], [text2], [cmd2], [key2]]]
[[name1, text1, cmd1, key1], [name2, text2, cmd2, key2]]
List<Object> curObject = extractedList(Array.get(o, i));
if (curObject.size() == 1) {
result.add((T) curObject.get(0));//这里去掉[]
} else {
result.add((T) curObject);
}
谢谢两位,我的做法与两位类似,回头再试下两位的代码
public static <T> List<T> extractedList(Object o) {
// 创建返回对象
List<T> result = new ArrayList<T>();
Class type=o.getClass();
// 判断对象是否数组
if (type.isArray()) {
Class ct=type.getComponentType();
int len=Array.getLength(o);
if(ct.isArray()) {
for(int i=0;i<len;i++) {
result.add((T) extractedList(Array.get(o, i)));
}
}
else {
for(int i=0;i<len;i++) {
reuslt.add((T) Array.get(o, i));
}
}
}
return result;
}
//标志当前返回的List是个数组还是对象
public static boolean isObjectFlag = false;
public static <T> List<T> extractedList(Object o) {
// 创建返回对象
List<T> result = new ArrayList<T>();
// 判断对象是否数组
if (o.getClass().isArray()) {
// 是数组,则遍历
for (int i = 0; i < Array.getLength(o); i++) {
// 递归,不是数组将返回加入到列表尾,是则继续递归
List<T> temp = extractedList(Array.get(o, i));
if(!isObjectFlag) { //如果是数组则直接加入
result.add((T) temp);
}else { //如果是对象则取返回集合中的第一个对象 加入
result.add(temp.get(0));
}
isObjectFlag = false;
}
} else {
// 加入对象到列表
isObjectFlag = true;
result.add((T) o);
}
// 返回数组列表
return result;// new ArrayList<T>(result);
}