Как проверить, содержит ли массив на Java нулевые (null) элементы

JavaJavaBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы научитесь проверять, содержит ли массив на Java нулевые (null) элементы. Работа с нулевыми значениями является фундаментальным навыком в программировании на Java для предотвращения распространенных ошибок, таких как NullPointerException. Мы рассмотрим три различных метода для достижения этой цели: перебор элементов массива с использованием цикла, применение возможностей Stream API и подсчет количества нулевых элементов в массиве. По завершении этого практического занятия вы получите практические навыки для эффективного определения и управления нулевыми значениями в своих массивах на Java.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java(("Java")) -.-> java/FileandIOManagementGroup(["File and I/O Management"]) java/BasicSyntaxGroup -.-> java/if_else("If...Else") java/BasicSyntaxGroup -.-> java/for_loop("For Loop") java/DataStructuresGroup -.-> java/arrays("Arrays") java/DataStructuresGroup -.-> java/arrays_methods("Arrays Methods") java/FileandIOManagementGroup -.-> java/stream("Stream") subgraph Lab Skills java/if_else -.-> lab-559998{{"Как проверить, содержит ли массив на Java нулевые (null) элементы"}} java/for_loop -.-> lab-559998{{"Как проверить, содержит ли массив на Java нулевые (null) элементы"}} java/arrays -.-> lab-559998{{"Как проверить, содержит ли массив на Java нулевые (null) элементы"}} java/arrays_methods -.-> lab-559998{{"Как проверить, содержит ли массив на Java нулевые (null) элементы"}} java/stream -.-> lab-559998{{"Как проверить, содержит ли массив на Java нулевые (null) элементы"}} end

Проверка массива на наличие нулевых (null) элементов с помощью цикла

На этом этапе мы научимся проверять массив на Java на наличие нулевых (null) значений, проходя по его элементам в цикле. Работа с нулевыми значениями является важной частью программирования на Java, так как это позволяет избежать распространенных ошибок - NullPointerException.

В Java нулевое (null) значение означает, что переменная не ссылается на какой-либо объект. Если вы пытаетесь обратиться к методу или полю переменной, которая равна null, возникает ошибка NullPointerException, что приводит к аварийному завершению программы.

Создадим простую программу на Java, которая демонстрирует, как пройти по массиву и проверить его на наличие нулевых элементов.

  1. Откройте файл HelloJava.java в редакторе WebIDE. Если он не открыт, вы можете найти его в проводнике файлов слева, в папке project.

  2. Замените существующий код в файле HelloJava.java следующим кодом:

    public class HelloJava {
        public static void main(String[] args) {
            String[] names = new String[5]; // Declare an array of Strings with size 5
            names[0] = "Alice";
            names[1] = "Bob";
            names[2] = null; // Assign a null value
            names[3] = "Charlie";
            names[4] = null; // Assign another null value
    
            System.out.println("Checking array for null values:");
    
            // Loop through the array
            for (int i = 0; i < names.length; i++) {
                // Check if the current element is null
                if (names[i] == null) {
                    System.out.println("Element at index " + i + " is null.");
                } else {
                    System.out.println("Element at index " + i + " is: " + names[i]);
                }
            }
        }
    }

    Рассмотрим новые части этого кода:

    • String[] names = new String[5];: Эта строка объявляет массив с именем names, который может содержать 5 объектов типа String. При создании массива объектов таким образом элементы автоматически инициализируются значением null.
    • names[2] = null; и names[4] = null;: Мы явно присваиваем null элементам с индексами 2 и 4.
    • for (int i = 0; i < names.length; i++): Это стандартный цикл for, который проходит по массиву от первого элемента (индекс 0) до последнего (names.length - 1).
    • if (names[i] == null): Внутри цикла это условие if проверяет, равен ли элемент с текущим индексом i значению null.
    • System.out.println("Element at index " + i + " is null.");: Если элемент равен null, выполняется эта строка.
    • System.out.println("Element at index " + i + " is: " + names[i]);: Если элемент не равен null, выполняется эта строка, выводящая значение элемента.
  3. Сохраните файл HelloJava.java (Ctrl+S или Cmd+S).

  4. Теперь скомпилируйте модифицированную программу. Откройте терминал внизу WebIDE и выполните следующую команду:

    javac HelloJava.java

    Если нет ошибок, компиляция прошла успешно.

  5. Наконец, запустите скомпилированную программу:

    java HelloJava

    Вы должны увидеть вывод, похожий на следующий:

    Checking array for null values:
    Element at index 0 is: Alice
    Element at index 1 is: Bob
    Element at index 2 is null.
    Element at index 3 is: Charlie
    Element at index 4 is null.

    Этот вывод показывает, что наша программа успешно обнаружила и сообщила о нулевых элементах в массиве.

На этом этапе вы научились вручную проходить по массиву на Java и проверять каждый элемент на наличие нулевого значения с помощью простого условия if. Это фундаментальный метод для предотвращения потенциальных ошибок NullPointerException.

Использование Stream API для обнаружения нулевых (null) элементов

На предыдущем этапе мы использовали традиционный цикл for для проверки массива на наличие нулевых (null) значений. В Java 8 был введен Stream API, который предоставляет более функциональный и часто более компактный способ обработки коллекций данных, включая массивы. На этом этапе мы научимся использовать Stream API для обнаружения нулевых элементов.

Stream API позволяет выполнять операции над последовательностью элементов декларативным способом. Это означает, что вы описываете что вы хотите сделать, а не как это сделать (как в случае с циклом for).

Модифицируем нашу программу HelloJava.java, чтобы использовать Stream API для поиска и вывода нулевых элементов.

  1. Откройте файл HelloJava.java в редакторе WebIDE.

  2. Замените существующий код следующим:

    import java.util.Arrays; // Import the Arrays class
    import java.util.Objects; // Import the Objects class
    
    public class HelloJava {
        public static void main(String[] args) {
            String[] names = new String[5];
            names[0] = "Alice";
            names[1] = "Bob";
            names[2] = null;
            names[3] = "Charlie";
            names[4] = null;
    
            System.out.println("Checking array for null values using Stream API:");
    
            // Convert the array to a Stream
            Arrays.stream(names)
                  // Filter for null elements
                  .filter(Objects::isNull)
                  // Print each null element (or a message indicating null)
                  .forEach(name -> System.out.println("Found a null element."));
        }
    }

    Разберем новые части кода:

    • import java.util.Arrays;: Мы должны импортировать класс Arrays, чтобы использовать его метод stream().
    • import java.util.Objects;: Мы импортируем класс Objects, чтобы использовать метод isNull(), который является удобным способом проверить, является ли объект null.
    • Arrays.stream(names): Эта строка преобразует наш массив names в поток (Stream) объектов типа String.
    • .filter(Objects::isNull): Это промежуточная операция. Она фильтрует поток, оставляя только те элементы, для которых условие Objects.isNull(element) истинно (то есть элементы, которые равны null). Objects::isNull - это ссылка на метод, сокращенная запись лямбда-выражения name -> Objects.isNull(name).
    • .forEach(name -> System.out.println("Found a null element."));: Это терминальная операция. Она выполняет действие для каждого оставшегося элемента в потоке (которые являются нулевыми элементами после фильтрации). В этом случае она выводит "Found a null element." для каждого найденного нулевого элемента.
  3. Сохраните файл HelloJava.java.

  4. Скомпилируйте программу в терминале:

    javac HelloJava.java
  5. Запустите программу:

    java HelloJava

    Вы должны увидеть вывод, похожий на следующий:

    Checking array for null values using Stream API:
    Found a null element.
    Found a null element.

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

Подсчет нулевых (null) элементов

На предыдущих этапах мы научились определять нулевые (null) элементы в массиве, используя как цикл for, так и Stream API. Иногда, вместо того чтобы просто определить нулевые элементы, вам может понадобиться узнать, сколько именно таких элементов содержится в массиве. На этом этапе мы научимся подсчитывать количество нулевых элементов с помощью Stream API.

Stream API предоставляет удобный метод count(), который, примененный к потоку, возвращает количество элементов в этом потоке. Мы можем сочетать этот метод с операцией filter(), которую мы использовали ранее, чтобы подсчитать только нулевые элементы.

Модифицируем нашу программу HelloJava.java еще раз, чтобы подсчитать нулевые элементы и вывести общее количество.

  1. Откройте файл HelloJava.java в редакторе WebIDE.

  2. Замените существующий код следующим:

    import java.util.Arrays;
    import java.util.Objects;
    
    public class HelloJava {
        public static void main(String[] args) {
            String[] names = new String[5];
            names[0] = "Alice";
            names[1] = "Bob";
            names[2] = null;
            names[3] = "Charlie";
            names[4] = null;
    
            System.out.println("Counting null values using Stream API:");
    
            // Convert the array to a Stream
            long nullCount = Arrays.stream(names)
                                  // Filter for null elements
                                  .filter(Objects::isNull)
                                  // Count the remaining elements (which are null)
                                  .count();
    
            System.out.println("Total number of null elements: " + nullCount);
        }
    }

    Вот что нового:

    • long nullCount = ... .count();: После фильтрации потока так, чтобы он содержал только нулевые элементы, мы вызываем терминальную операцию count(). Эта операция возвращает количество элементов в отфильтрованном потоке в виде значения типа long, которое мы сохраняем в переменной nullCount.
    • System.out.println("Total number of null elements: " + nullCount);: Эта строка выводит итоговое количество нулевых элементов.
  3. Сохраните файл HelloJava.java.

  4. Скомпилируйте программу в терминале:

    javac HelloJava.java
  5. Запустите программу:

    java HelloJava

    Вы должны увидеть следующий вывод:

    Counting null values using Stream API:
    Total number of null elements: 2

    Этот вывод показывает, что наша программа правильно подсчитала два нулевых элемента в массиве. Использование методов filter() и count() Stream API вместе является эффективным и читаемым способом подсчета определенных типов элементов в коллекции, включая нулевые значения.

Теперь вы узнали три разных способа обработки нулевых значений в массиве на Java: использование традиционного цикла for для проверки каждого элемента, использование Stream API для фильтрации и определения нулевых элементов, а также использование Stream API для фильтрации и подсчета нулевых элементов. Эти методы являются фундаментальными для написания надежного кода на Java, который избавляет от ошибок NullPointerException.

Резюме

В этом практическом занятии (лабораторной работе) мы научились проверять массив на Java на наличие нулевых (null) элементов различными способами. Мы начали с реализации традиционного цикла для перебора элементов массива и явной проверки каждого элемента на нулевое значение с использованием условия if. Этот метод представляет собой простой и фундаментальный способ определения нулевых элементов и полезен для понимания базового концепта обработки нулевых значений в массивах.

Затем мы изучили более современные и компактные методы для обнаружения нулевых элементов. В практическом занятии показано, как использовать Stream API в Java для эффективной проверки на наличие нулевых элементов. Этот подход использует операции потоков для обработки элементов массива и определения наличия нулевых значений в более функциональном стиле. Наконец, мы научились подсчитывать количество нулевых элементов в массиве, что позволяет количественно оценить распространенность нулевых значений. Эти методы предлагают различные уровни выразительности и эффективности при обработке нулевых значений в массивах на Java.