如何在Java中将列表列表转换为二维数组

时间:2019-04-08 17:34:29

标签: java multidimensional-array

我想出了以下解决方案,不确定是否可以使用其他方法消除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;
};

此外,如果可以通过一个管道改善这一点,我将不胜感激。

1 个答案:

答案 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;

}