2015-02-11 4 views
1

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

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 содержат нули в первую очередь? Не можете ли вы избежать добавления к нему нулей? – Eran

+0

@Eran Я хочу только проверить, что это пусто или нет –

+0

И что именно на ваш вопрос? Пожалуйста, соблюдайте соглашения об именах Java, не используйте raw ArrayList и используйте boolean, а не Boolean. –

ответ

1

Сначала вы не должны разрешать null s в списке. В этом случае просто List.isEmpty() расскажет вам, является ли список пустым.

Если вы не можете или не хотите отклонять null s, ваш код работает и правильно проверяет, содержит ли только список null s.

Вы даже не должны объединить его с помощью метода 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; 
}  
Смежные вопросы