Как проверить, не являются ли списки в списке пустыми? - PullRequest
0 голосов
/ 11 октября 2018

У меня есть список списков на Java.Вот код:

List<List<Integer>> myList = new ArrayList<>();
myList.add(new ArrayList<Integer>());
myList.add(new ArrayList<Integer>());
myList.add(new ArrayList<Integer>());

myList.get(0).add(1);
myList.get(0).add(2);
myList.get(0).add(3);
myList.get(1).add(4);
myList.get(1).add(5);
myList.get(1).add(6);
myList.get(2).add(7);
myList.get(2).add(8);
myList.get(2).add(9);

Теперь в части моего кода я хочу проверить, не являются ли все три списка, которые расположены в myList, пустыми и нулевыми.Должен ли я проверять каждый из этих списков один за другим, например:

if (myList.get(0) != null && !myList.get(0).isEmpty()) { 
    // do something
} 

... или есть лучший и более короткий способ вместо проверки один за другим?

Ответы [ 7 ]

0 голосов
/ 12 октября 2018

Я бы использовал цикл Java foreach.Это похоже на цикл по индексу, но читается лучше и немного короче.

boolean nonempty = true;

for (List<Integer> list : myList) {
    if (list == null || list.isEmpty()) {
        nonempty = false;
        break;
    }
}

Это также позволяет вам выйти из строя рано, если вы найдете пустой список.

0 голосов
/ 12 октября 2018

Я хочу проверить, не являются ли все три списка, которые находятся в списке, не пустыми

myList.stream().anyMatch(List::isEmpty);

Это должно дать вам вывод, если какой-либо внутренний список пуст или нет.Исходя из вашего требования, вы можете отрицать его.
Но если вам также нужно проверить на null, то вы можете попробовать что-то вроде:

myList.stream().anyMatch(i -> null==i || i.isEmpty())

Снова вы можете отрицать при необходимости.Этот ответ должен добавить вариант к вышеупомянутым ответам.

0 голосов
/ 12 октября 2018
int temp = 0;
for(int i=0;i<L.size();i++) {
    if (L.get(i).isEmpty()) {
        temp++;
    }
}
if (temp == L.size()) {
   //do what you want, all the lists inside L are empty
}

Это все, что я могу думать прямо сейчас.

0 голосов
/ 12 октября 2018

Используя Java 7 и ниже, это классический подход к этому:

for (List<Integer> list : myList) {
    if (list != null && !list.isEmpty()) {
        // do something with not empty list
    }
}

С Java 8 и выше вы можете использовать forEach:

myList.forEach(list -> {
    if (list != null && !list.isEmpty()) {
        // do something with not empty list
    }
});

или, какуже упомянутый Евгением , с помощью потокового API вы можете заменить оператор if на лямбда-выражение:

myList.stream()
      .filter(list -> (list != null && !list.isEmpty()))
      .forEach(list -> {
          // do something with not empty list
      });

Примечание: все эти 3 примера подразумевают, что вы инициализировали переменную myListи это не null, в противном случае NullPointerException будет добавлено во все приведенные выше фрагменты.

Стандартный JDK не может быстро проверить, что коллекция не равна нулю и не пуста.Но если вы используете библиотеку Apache commons-collections, они предлагают такой метод: CollectionUtils.isNotEmpty () .Однако я бы не рекомендовал добавлять эту зависимость в ваш проект только ради этой единственной функции.

0 голосов
/ 12 октября 2018

Вы можете сделать что-то вроде этого:

boolean isEmpty = false;
for(List<Integer> list : myList) {
   if(list == null || list.isEmpty()) {
      isEmpty = true;
      break;
   }
}

if(!isEmpty) { // do your thing; }
0 голосов
/ 11 октября 2018

Просто проверьте, что ваша коллекция не содержит пустой список

if (!L.contains(Collections.EMPTY_LIST)){ do something }

или пустую и пустую проверку (будьте осторожны с NullPointerException !!!)

if (!L.contains(Collections.EMPTY_LIST) && !L.contains(null)){ do something }
0 голосов
/ 11 октября 2018

Вы можете использовать потоковый API для этого, но также и простой цикл:

 boolean allNonEmptyOrNull = myList.stream()
     .allMatch(x -> x != null && !x.isEmpty());

Или вы можете проверить, содержится ли null или пустое List, например, с помощью:

System.out.println(myList.contains(null) || myList.contains(Collections.<Integer> emptyList()));

Но этот последний вариант не работает с неизменяемыми коллекциями Java 9, например:

List.of(1, 2, 3).contains(null); 

выдаст NullPointerException.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...