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