java - 通用多维数组转换函数

标签 java arrays generics multidimensional-array

此函数将 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){
    // ?
}

最佳答案

泛型和数组不能混合使用。一种替代方法是传递表示 XClass 实例,并使用它来创建返回数组(请参阅 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/

相关文章:

java - 我应该拆分纹理图集吗?

java - 获取所有应用在android上的运行时间

Java正则表达式用于对特定模式进行正数和少数特殊符号验证

arrays - 子段中最大值的最小值......在 O(n) 复杂度中

java - 在java中,我如何检查用于输入成绩的数组的输入验证(不能为负数,不能超过100)

java - 在 SharedPreference 中保存通用类型的列表

java - 混合泛型方法和 Java 8 语法的复合表达式无法编译

C# 获取给定 T 的类型 Generic<T>

c# - 关于 c# 接口(interface)和泛型的问题

javascript - 如果长度小于,则用 "0"填充数组