Java проверяет пустой ArrayList как структуру класса

1

Я пытаюсь создать структуру класса, как в этом примере:

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) не смогли проверить правильно и вернуть неверный результат

  • 1
    Почему ваш ArrayList содержит нулевые значения? Разве вы не можете избежать добавления нулей к нему?
  • 0
    @Eran, я хочу только проверить, пусто это или нет
Показать ещё 4 комментария
Теги:
arraylist

1 ответ

1
Лучший ответ

Сначала вы не должны допускать 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;
}    

Ещё вопросы

Сообщество Overcoder
Наверх
Меню