我正在尝试创建类结构,如下例所示:
public class SubjectListStructure {
public String topic_id;
public String topic_title;
public String created_date;
public String avatar_url;
public String vote;
public String name_family;
}
现在,我想创建一个由这些对象组成的ArrayList:
ArrayList<SubjectListStructure> nSubjects = = new ArrayList<SubjectListStructure>();
但现在我无法检查nSubjects
是否为空或者是否有类似此代码的数据:
public static Boolean ContainsAllNulls(ArrayList<SubjectListStructure> arrList)
{
if(arrList != null)
{
for(SubjectListStructure a : arrList)
if(a != null) return false;
}
return true;
}
或nSubjects.isEmpty()
此解决方案和ContainsAllNulls(nSubjects)
无法正确检查并返回错误的结果
答案 0 :(得分:1)
首先,您不应该在列表中允许null
。在这种情况下,只需List.isEmpty()
即可告诉您列表是否为空。
如果您不能或不想禁止null
,那么如果列表中只包含null
,您的代码就会正常运行并进行正确测试。
您甚至不必将其与isEmpty()
方法结合使用,因为增强的for
也适用于空列表和数组(在这种情况下,for
的正文将不会执行。)
你可以将你的代码概括为,这不仅适用于ArrayList
,而且适用于所有Collection
s(列表,集合等)以及任何元素类型不仅仅是您的自定义SubjectListStructure
类型:
public static boolean emptyOrAllNulls(Collection<?> c) {
if (c != null)
for (Object o : c)
if(o != null)
return false;
return true;
}
请注意,增强型for
使用Collection.iterator()
获取Iterator
来遍历集合的元素。在空集合的情况下,首先检查集合是否包含任何元素而不是通过迭代器是更有效的:
public static boolean emptyOrAllNulls(Collection<?> c) {
if (c != null && !c.isEmpty())
for (Object o : c)
if(o != null)
return false;
return true;
}