[英]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.