如何解决返回转换为数组的列表列表,不包括任何空项
发现很难返回转换为数组的列表列表,不包括任何空项。项目应该按照它们在列表中出现的顺序出现。我的测试通过直到行:
assertEquals("[-1,-2,-1,4,5,6,7,8,9,100,200,700,900,10,20,90,22]",Arrays.toString(result) ));我想知道是什么问题。
public static int[] nonNullItemsToArray(ArrayList<ArrayList<Integer>> list) {
if (list == null) {
return null;
}
int arrayLength = 0;
for (int i = 0; i < list.size(); i++) {
if (list.get(i) != null) {
arrayLength += list.get(i).size();
}
}
int j = 0;
int[] alist = new int[arrayLength];
for (int i = 0; i < list.size(); i++) {
if (list.get(i) != null) {
for (int k = 0; k < list.get(i).size(); k++) {
if (list.get(i).get(k) != null) {
alist[j++] = list.get(i).get(k);
}
}
}
}
return alist;
}
@Test @Graded(description="NonNullItemsToArrayComprehensive")
public void testNonNullItemsToArrayComprehensive() {
testNonNullItemsToArrayBasic();
int[] result = ListOfListService.nonNullItemsToArray(null);
assertEquals(null,result);
result = ListOfListService.nonNullItemsToArray(list4_nullItems);
assertEquals("[-1,Arrays.toString(result));
currentMethodName = new Throwable().getStackTrace()[0].getMethodName();
}
解决方法
正如在 his/her answer 中已经提到的 saka,您的代码在结果数组中产生了不需要的 0
条目,特别是一个 0
条目对应于嵌套列表中的每个 null
输入。
input = [[1,2,null],null,[null,3,4]]
entry 1 ^ entry 2 ^
output = [1,4,0]
in the result ^ ^
造成这种情况的根本原因是您在计算初始数组大小时没有考虑这些嵌套的 null
条目。
int arrayLength = 0;
for (int i = 0; i < list.size(); i++) {
if (list.get(i) != null) {
arrayLength += list.get(i).size();
}
}
在这里,不是简单地执行 arrayLength += list.get(i).size()
,您必须确定嵌套列表中非 null
条目的数量并将此计数添加到 arrayLength
。
for (int k = 0; k < list.get(i).size(); k++) {
if (list.get(i).get(k) != null) {
arrayLength++;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。