В Java я хочу преобразовать вложенный List
, который на самом глубоком уровне содержит унифицированный тип, в многомерный массив этого типа. Например, ArrayList<ArrayList<ArrayList<ArrayList<String>>>>
в String[][][][]
. Я пробовал несколько вещей, и я могу получить только массив объектов, таких как Object[][][][]
. Для «простых списков» кажется, что Apache Commons Lang выполняет свою работу, но я не могу разобраться с вложенными делами.
Обновление:
Чтобы получить многомерный массив типа Object, я использую рекурсивную функцию, поэтому не могу установить тип ключа с помощью toArray (), см. Выдержку:
// the argument of this function is a (nested) list
public static Object convert(Object object) {
Object[] result = null;
List list = (List) object;
if (list != null) {
Object type = getElementType(list);
if (type instanceof List) {
int size = list.size();
result = new Object[size];
for (int counter = 0; counter < size; counter++) {
Object element = list.get(counter);
result[counter] = (element != null) ? convert(element) : null;
}
} else {
result = list.toArray();
}
}
return result;
}
private static Object getElementType(List list) {
Object result = null;
for (Object element : list) {
if (element != null) {
result = element;
break;
}
}
return result;
}