Я пытаюсь создать структуру класса, как в этом примере:
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)
не смогли проверить правильно и вернуть неверный результат
Сначала вы не должны допускать null
в списке. В этом случае List.isEmpty()
сообщит вам, пуст ли список.
Если вы не можете или не хотите отклонять null
, ваш код работает и правильно проверяет, содержит ли список только null
.
Вам даже не нужно сочетать его с методом isEmpty()
потому что расширенный for
работы для пустых списков и массивов тоже (в этом случае тело элемента for
не будет выполнено).
Вы можете обобщить свой код на нечто вроде этого, которое работает не только для ArrayList
но и для всей Collection
(списки, наборы и т.д.) И любого типа элемента, а не только ваш собственный тип 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;
}