我想出了以下解决方案,不确定是否可以使用其他方法消除Type:safety警告。
BiFunction<List<List<T>>, Class<T>,T[][]> toArray = (list,type) ->
{
T a[][] = (T[][]) Array.newInstance(type,
list.size(), list.get(0).size());
IntStream.range(0, a.length)
.forEach(i -> {
a[i]=(T[]) list.get(i).toArray();
});
return a;
};
此外,如果可以通过一个管道改善这一点,我将不胜感激。
答案 0 :(得分:1)
我有两个建议,两者都将List从List转换为List,然后将List转换为List,并将每个元素作为T []添加到新列表中。
仅将Array.newInstance用于创建辅助对象并添加@SuppressWarnings注释
@SuppressWarnings("unchecked")
public static <T> T[][] toArray(List<List<T>> list, Class<T> type) {
T aux[] = (T[]) Array.newInstance(type, 0);
T auxBi[][] = (T[][]) Array.newInstance(type, 0, 0);
List<T[]> newList = new ArrayList<>();
list.forEach(e -> newList.add(e.toArray(aux)));
T[][] newBi = newList.toArray(auxBi);
return newBi;
}
或
添加辅助词作为参数,而不是 type
public static <T> T[][] toArray(List<List<T>> list, T aux[], T auxBi[][]) {
List<T[]> newList = new ArrayList<>();
list.forEach(e -> newList.add(e.toArray(aux)));
T[][] newBi = newList.toArray(auxBi);
return newBi;
}