Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:将数组的数组转换为集合的集合,反之亦然_Java_Arrays_Data Structures_Collections - Fatal编程技术网

Java:将数组的数组转换为集合的集合,反之亦然

Java:将数组的数组转换为集合的集合,反之亦然,java,arrays,data-structures,collections,Java,Arrays,Data Structures,Collections,请建议一些优雅的转换方式 在Java中,数组的数组到集合的集合,反之亦然 我想JavaAPI中没有方便的方法,对吗 public static <T> T[][] nestedCollectionsToNestedArrays( Collection<? extends Collection<T>> source){ // ... ? } public static <T> Collection<Collection<T

请建议一些优雅的转换方式
在Java中,数组的数组集合的集合,反之亦然

我想JavaAPI中没有方便的方法,对吗

public static <T> T[][] nestedCollectionsToNestedArrays(
    Collection<? extends Collection<T>> source){

  // ... ?
}

public static <T> Collection<Collection<T>> nestedArraysToNestedCollections(
    T[][] source){

  // ... ?
}
publicstatict[]nestedcollectionstonestedarray(

收集以下是数组->收集的方法:

public static <T> Collection<Collection<T>>
        nestedArraysToNestedCollections(T[][] source) {
    Collection<Collection<T>> ret = new ArrayList<Collection<T>>();
    for (int i = 0; i < source.length; i++) {
        // could be ret.add(new ArrayList<T>(Arrays.asList(source[i]));
        Collection<T> list = new ArrayList<T>(source[i].length);
        for (int j = 0; j < source[i].length; j++) {
            list.add(source[i][j]);
        }
    }
    return ret;
}
公共静态集合
嵌套ArrayStoneStedCollections(T[][]源){
Collection ret=new ArrayList();
for(int i=0;i

另一个方向要复杂得多。

对于集合的集合->数组的数组:(它只返回一个对象[][],因为“T”的类型信息不存在。如果希望数组是正确的类型,则必须手动传入T类,这将更加复杂)

公共静态对象[][]嵌套ListStonestDarray(
收藏>来源){
对象[][]结果=新对象[source.size()][];
int i=0;
对于(集合子集合:源){
结果[i++]=subCollection.toArray();
}
返回结果;
}
附加问题:你怎么了 基元类型的嵌套数组?是吗 必须为每个 原始类型

是的,您可以为每个基元类型声明方法,也可以使用反射和牺牲类型安全性。原因是每个基元数组类型都是不相关的,并且除了对象之外,所有基元数组类型都没有超类型

因为禁止泛型数组 创造


不,但这是另一个问题的原因:为什么集合集合->返回T[][]的数组很难解决。

没什么,但我想如果这是一个库方法,他最好用稍微快一点的方法来完成。当然,增强的for循环在将来可能会更快,所以它有点平衡。
public static Object[][] nestedListsToNestedArrays(
    Collection<? extends Collection<?>> source){
  Object[][] result = new Object[source.size()][];
  int i = 0;
  for (Collection<?> subCollection : source) {
    result[i++] = subCollection.toArray();
  }
  return result;
}