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

Какой лучший способ проверить, является ли массив значением null или содержимое массива null в комбинации в 1 операторе в Java 6:

if ((myArray[0] != null) || (myArray[1] != null) || (myArray!= null)) {
    ...
}

Ответы [ 6 ]

0 голосов
/ 07 июня 2018

Вместо того, чтобы обрабатывать массив, повторно использовать существующую коллекцию для этого случая.

  1. Преобразовать массив в список
  2. Проверить, что значение Null присутствует в списке или не используется метод contains ();

Пожалуйста, найдите образец кода:

public static void main(String[] args) {
        Integer[] array = new Integer[3];

        array[0] = 1;
        array[1] = null;
        array[2] = 2;

        System.out.println(Arrays.asList(array).contains(null));
    }
0 голосов
/ 07 июня 2018

например, это

boolean isNullOrContainsNull = array == null || Arrays.asList(array).contains(null);

проверяет в строке, является ли массив нулевым или содержит нулевые элементы

Если вы хотите проверить, является ли массив пустым или пустым, или все элементыnull take

boolean containsNothingUseful = array == null
        || array.length == 0
        || !new HashSet<String>(Arrays.asList(array))
            .retainAll(Arrays.asList((String)null));

(при условии массива String[])

Использует метод Collection#retainAll(), который возвращает true, когда присутствовали другие значения, то есть обратное значениеof "containsOnly"

Использование этого одного вкладыша на самом деле довольно неэффективно, и лучше использовать метод, подобный приведенному ниже, который не создает много временных объектов и изменяет коллекции и т. д.

public static boolean containsNothingUseful(String[] array) {
    if (array == null || array.length == 0)
        return true;
    for (String element : array) {
        if (element != null)
            return false;
    }
    return true;
}

// ...
if (containsNothingUseful(myArray)) { .. }
0 голосов
/ 07 июня 2018

Попробуйте это

 if (myArray == null || Arrays.stream(myArray).allMatch(element-> element==null)) {}

Edit - для Java 6, я действительно не вижу, чтобы это происходило в одной строке.Вы можете попробовать это, если одна строка не нужна

  boolean isNull = true;
    if(myArray==null){
        System.out.println("array is null");
    }else{
        for(Integer element: myArray){
            if(element!=null){
                System.out.println("array is not null");
                isNull=false;
                break;
            }
        }
        if(isNull)
            System.out.println("Array is null");
    }
0 голосов
/ 07 июня 2018

Проверьте, является ли массив пустым:

String array[] = null;
if (array == null) {
  System.out.println("array is null");
}

Проверьте, является ли массив пустым:

array = new int[0];
if (array.length == 0) {
  System.out.println("array is empty");
}

Проверьте на нулевое значение одновременно:

int[] array = ...;
if (array.length == 0) { } // no elements in the array

if (array == null || iarray.length == 0) { }
0 голосов
/ 07 июня 2018

Чтобы он проверял любое значение, я бы использовал allMatch.Также важно сначала проверить массив! = Null, иначе вы получите исключение, если оно есть.

if (array == null || Arrays.stream(array).allMatch(Objects::isNull)) 

Обратите внимание, что это не будет работать с Java до версии 8, OP отредактировал его требования после того, как я опубликовал ответ

0 голосов
/ 07 июня 2018

Во-первых, проверьте, не является ли сам массив null.Если массив равен null, он не имеет смысла перебирать его элементы, так как Java будет выдавать NullPointerException при доступе к нему:

if (myArray != null) {
    // ...
}

Затем внутри тела условия перебирать все его элементыи проверьте, является ли один из них null.

boolean hasNull = false;
for (int i=0; i<myArray.length; i++) {
    if (myArray[i] == null) {
        hasNull = true;
        break; // to terminate the iteration since there is no need to iterate more
    } 
}

Это однострочное решение (спасибо за предупреждение от @Napstablook).Условие оценивается как true, если сам массив равен null или один из его элементов равен null:

if !(myArray != null && myArray[0] != null && myArray[1] != null) { ... }

Имейте в виду, что оператор && работает, если левая сторонаоцененный как false, он останавливает оценку остальной части условия, потому что это не повлияет на результат.То же самое делает ||, но с true.Тем не менее, я предлагаю вам избежать этого решения, так как индекс может переполниться.Лучше использовать for-loop, упомянутый выше.

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