簡體   English   中英

Java:將數組的數組轉換為集合的集合,反之亦然

[英]Java: Converting arrays of arrays to collections of collections and vice versa

請提出一些優雅的轉換方式
在Java中將數組的數組轉換集合的集合 ,反之亦然。

我想Java API中沒有便捷的方法,對嗎?

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

  // ... ?
}

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

  // ... ?
}

附加問題:
原始類型的嵌套數組有什么用?

由於禁止創建通用數組 ,我是否必須為每種原始類型聲明方法?

對於Collection of Collections-> arrays數組:(它只返回一個Object [] [],因為不存在“ T”的類型信息。如果要使該數組成為T,則必須手動傳遞T類正確的類型,它將更加復雜)

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;
}

附加問題:什么是基本類型的嵌套數組? 我是否必須為每種原始類型聲明方法,

是的,您可以為每種基本類型聲明方法,或者使用反射和犧牲類型安全性。 原因是每種基本數組類型都不相關,並且除Object以外的所有基本數組類型都沒有超類型。

因為禁止通用數組創建?

不,但這是另一個問題的原因:為什么很難在Collection的Collections->返回T [] []的數組數組中找到問題。

這是array-> Collection的方法:

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;
}

另一個方向要復雜得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM