Вы можете создать свой собственный List
, который просто делегирует, например, ArrayList
, но предотвращает добавление null
или пустых списков:
public class NonEmptyUserList implements List<List<UserDetails>>{
private ArrayList<List<String>> mDelegate = new ArrayList<>();
public void add(int index, List<UserDetails> element) {
if (element == null || element.isEmpty()) {
return;
}
mDelegate.add(index, element);
}
public boolean add(List<UserDetails> element) {
if (element == null || element.isEmpty()) {
return false;
}
return mDelegate.add(e);
}
public List<UserDetails> set(int index, List<UserDetails> element) {
if (element == null || element.isEmpty()) {
return null;
}
return mDelegate.set(index, element);
}
public boolean addAll(Collection<? extends List<UserDetails>> c) {
boolean changed = false;
for (final List<String> list : c) {
changed = changed || add(list);
}
return changed;
}
public boolean addAll(int index, Collection<? extends List<UserDetails>> c) {
boolean changed = false;
int startIndex = index;
for (final List<String> list : c) {
add(startIndex, list);
changed = changed || (list != null) && !list.isEmpty();
startIndex++;
}
return changed;
}
// delegate all other methods required by `List` to mDelegate
}
Используя этот список, вы можете быть уверены, что нет null
или будут присутствовать пустые значения, и, таким образом, вы можете использовать:
NonEmptyUserList userList = new NonEmptyUserList();
userList.add(null);
userList.add(Collections.emptyList());
userList.isEmpty(); // returns true
List<UserDetails> subList = new ArrayList<>();
subList.add(null);
userList.add(subList);
userList.isEmpty(); // returns false
Если вы хотите обрабатывать подсписки только с пустыми элементами null
, вам нужно будет расширить вышеуказанную реализацию.Однако это единственное решение, которое я могу себе представить, которое не включает в себя перебор элементов списка.Но я бы не очень рекомендовал это решение.Я просто записал это, чтобы показать вам, что может быть возможным.
Я лично считаю, что ответ @Mureinik, использующий потоки, является наиболее благоприятным.