此函数将 String
的二维 Collection
转换为 String
的二维数组:
public static String[][] toArray(
Collection<? extends Collection<String>> values){
String[][] result = new String[ values.size() ][];
int i=0;
for( Collection<String> row : values ){
result[i] = row.toArray( new String[ row.size() ] );
i++;
}
return result;
}
如何编写这个函数才能一般地执行此操作:
public static <X> X[][] ArrayArray(Collection<? extends Collection<X>> values){
// ?
}
最佳答案
泛型和数组不能混合使用。一种替代方法是传递表示 X
的 Class
实例,并使用它来创建返回数组(请参阅 Array.newInstance()
)。我相信更好的方法是将 X[][]
作为另一个参数传递,填充它,然后返回它:
public static <X> X[][] toArray(Collection<? extends Collection<X>> values,
X[][] result) {
int i = 0;
for (Collection<X> row : values)
result[i] = row.toArray(result[i++]);
return result;
}
例如:
List<List<Integer>> l = Arrays.asList(Arrays.asList(1,2,3),
Arrays.asList(4,5),
Arrays.asList(6));
System.out.println(Arrays.deepToString(toArray(l, new Integer[l.size()][0])));
[[1, 2, 3], [4, 5], [6]]
关于java - 通用多维数组转换函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18107913/