I have to interface to some old code using nested arrays, so I have to convert my nested Lists to nested arrays. Any idea, suggestions, improvements are warmly welcomed.
public static <E> int getNestedListMaxSize(List<List<E>> list){
int result = 0;
if (list != null && list.size() > 0){
for (List<E> innerList : list){
result = Math.max(result, innerList == null ? 0 : innerList.size());
}
}
return result;
}
@SuppressWarnings("rawtypes")
public static <E> Class getNestedListClass(List<List<E>> list){
Class result = null;
if (list != null && list.size() > 0){
for (List<E> innerList : list){
if (innerList != null && innerList.size() > 0){
result = innerList.get(0).getClass();
break;
}
}
}
return result;
}
@SuppressWarnings({ "unchecked", "rawtypes" })
public static <E> E[][] convertNestedList(List<List<E>> list){
E[][] result = null;
Class clazz = getNestedListClass(list);
if (clazz != null){
result = (E[][]) Array.newInstance(clazz, list.size(), getNestedListMaxSize(list));
for(int i=0; i < list.size(); i++) {
E[] element = null;
if (list.get(i) != null){
E[] dummy = (E[]) Array.newInstance(clazz, list.get(i).size());
element = list.get(i).toArray(dummy);
}
result[i] = element;
}
}
return result;
}
public static void main(String[] args) {
List<List<String>> list = new ArrayList<List<String>>();
list.add(new ArrayList<String>());
list.get(list.size()-1).add("0.0");
list.get(list.size()-1).add("0.1");
list.get(list.size()-1).add("0.2");
list.add(new ArrayList<String>());
list.get(list.size()-1).add("1.0");
list.get(list.size()-1).add("1.1");
list.get(list.size()-1).add("1.2");
list.get(list.size()-1).add("1.3");
list.add(new ArrayList<String>());
list.get(list.size()-1).add("2.0");
list.get(list.size()-1).add("2.1");
String [][] array = convertNestedList(list);
System.out.println(Arrays.deepToString(array));
}