java - 返回转换为数组的列表列表,不包括任何空项
问题描述
发现很难返回转换为数组的列表列表,不包括任何空项。项目应该按照它们在列表中出现的顺序出现。我的测试通过直到行:
assertEquals("[-1, -2, -1, 4, 5, 6, 7, 8, 9, 100, 200, 700, 900, 10, 20, 90, 20, 22] ", Arrays.toString(结果)); 我想知道问题是什么。
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, -2, -1, 4, 5, 6, 7, 8, 9, 100, 200, 700, 900, 10, 20, 90, 20, 22]", Arrays.toString(result));
currentMethodName = new Throwable().getStackTrace()[0].getMethodName();
}
解决方案
正如 saka 在他/她的回答中已经提到的那样,您的代码会0
在结果数组中产生不需要的条目,特别是输入中嵌套列表中的0
每个条目都有一个条目。null
input = [[1, 2, null], null, [null, 3, 4]]
entry 1 ^ entry 2 ^
output = [1, 2, 3, 4, 0, 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++;
}
}
推荐阅读
- algorithm - 为什么所有文档的 BM25 评分结果都是负数?
- javascript - 如何在 Javascript 中从数组中返回特定元素?
- c# - How to take ID of a row in gridview when you press a button in a row
- python - Does + 1 really matter in the python function below?
- r - For loop for iterating between dates
- html - The right way to pass a input to the typescript file
- mysql - MySQL 存储函数在 id 输入时返回名称
- amazon-web-services - How to enable PodNodeSelector admission controller in EKS version 1.15
- android - Flutter WebView window.close() not working (Android)
- python - 第二次实例化一个类时出错