我有一个arrayList的arrayList,我想检查一个数组(subList)是否包含null值。问题是当第一个subList包含所有null时,它可以工作,但如果它是第二个subList,它就不起作用,因为第一个subList包含一个对象o
ArrayList<ArrayList<Type>> array = new ArrayList<ArrayList<Type>>();
ArrayList<Type> subList = new ArrayList<Type>();
for (int i = 0; i <= array.size(); i++) {
subList=array.get(i);
if (subList != null) {
for (Object o : subList) {
if (o != null)
return false;
}
}
}
return true;
我弄明白:
if (o != null)
return false;
让循环消失。那么如何继续循环
编辑:
public boolean containsOnlyNull(ArrayList<Type> subList) {
for (Object o : subList) {
if (o != null)
return false;
}
return true;
}
public boolean isEmpty() {
ArrayList<Type> subList = new ArrayList<Type>();
for (int i = 0; i <= array.size(); i++) {
subList = array.get(i);
if (subList != null) {
if(!containsOnlyNull(subList))
return false;
}
return true;
}
return true;
}
答案 0 :(得分:0)
您可以使用标志而不是return语句:
ArrayList<ArrayList<Type>> array = new ArrayList<ArrayList<Type>>();
ArrayList<Type> subList = new ArrayList<Type>();
boolean hasObject = false;
for (int i = 0; i <= array.size(); i++) {
subList=array.get(i);
if (subList != null) {
for (Object o : subList) {
if (o != null)
hasObject = true;
}
}
}
return hasObject;
在此版本中,如果在其中一个列表中出现null元素,则返回true。
但更简单的解决方案是将内循环提取到另一个方法然后使用return语句。
private boolean containsOnlyNull(List<Type list) {
//boolean allNull = true;
for (Object o : subList) {
if (o != null)
//allNull = false;
return false;
}
}
//return allNull;
return true;
}
你的方法:
ArrayList<ArrayList<Type>> array = new ArrayList<ArrayList<Type>>();
ArrayList<Type> subList = new ArrayList<Type>();
boolean hasObject = false;
for (int i = 0; i <= array.size(); i++) {
subList=array.get(i);
if (subList != null) {
if (!containsOnlyNull(subList)) return false; //or whatever the semantic is
}
}
return true;