有一个清单:
List<Integer[]> myList = new ArrayList<Integer[]>();
它包含一个sigle条目,但可能包含多个条目:
myList = [[2,null,1,null,null,3,6,1,1]]
我需要将此列表转换为数组Integer[][]
,但转换因空值而失败:
Integer[] myArr = myList.toArray(new Integer[myList.size()]);
如何解决这个问题?
修改#1
我需要得到:
myArr = [2,null,1,null,null,3,6,1,1]
答案 0 :(得分:11)
试试这个(假设您在评论中实际上已经谈到了List<Integer[]>
):
List<Integer[]> myList = new ArrayList<Integer[]>();
myList.add(new Integer[] {2,null,1,null,null,3,6,1,1} );
Integer[][] myArr = myList.toArray(new Integer[myList.size()][]);
如果将数组列表转换为数组,则会得到一个二维数组,因此您的参数也应该是一个。
答案 1 :(得分:2)
为我工作
List<Integer[]> myList = new ArrayList<Integer[]>();
Integer[] ia = {2,null,1,null,null,3,6,1,1};
myList.add(ia);
Integer[][] iaa = myList.toArray(new Integer[myList.size()][]);
System.out.println(Arrays.deepToString(iaa));
答案 2 :(得分:1)
如果你有
List<Integer[]> myList = new ArrayList<Integer[]>();
只有一个数组,你可以做
Integer[] myArr = myList.get(0);
null
永远不会导致new Integer[]
答案 3 :(得分:1)
你确定这就是你在做什么。我已经尝试过这段代码并且工作正常:
List<Integer> myList = new ArrayList<Integer>();
myList.add(2);
myList.add(null);
myList.add(1);
Integer[] myArr = myList.toArray(new Integer[myList.size()]);
for(Integer i:myArr) {
System.out.println(i);
}
显示“2,null,1”。
但是,如果在“for循环”中我将“Integer i”更改为“int i”,则自动装箱会因null元素上的NullPointerException而失败。
只要你在Integer对象(而不是int基元)上创建一个数组,并将该数组的元素视为Integer对象(不会做一些会触发自动装箱/拆箱的东西),你应该没问题。
否则,您只需在将其转换为数组
之前手动删除列表中的所有空值