Введение
В этом практическом занятии (лабораторной работе) вы научитесь проверять, содержит ли массив на Java нулевые (null) элементы. Работа с нулевыми значениями является фундаментальным навыком в программировании на Java для предотвращения распространенных ошибок, таких как NullPointerException. Мы рассмотрим три различных метода для достижения этой цели: перебор элементов массива с использованием цикла, применение возможностей Stream API и подсчет количества нулевых элементов в массиве. По завершении этого практического занятия вы получите практические навыки для эффективного определения и управления нулевыми значениями в своих массивах на Java.
Перебор массива для проверки на null
На этом этапе мы научимся проверять массив на Java на наличие нулевых (null) значений, проходя по его элементам в цикле. Работа с нулевыми значениями является важной частью программирования на Java, так как это позволяет избежать распространенных ошибок - NullPointerException.
В Java нулевое (null) значение означает, что переменная не ссылается на какой-либо объект. Если вы пытаетесь обратиться к методу или полю переменной, которая равна null, возникает ошибка NullPointerException, что приводит к аварийному завершению программы.
Создадим простую программу на Java, которая демонстрирует, как пройти по массиву и проверить его на наличие нулевых элементов.
Откройте файл
HelloJava.javaв редакторе WebIDE. Если он не открыт, вы можете найти его в проводнике файлов слева, в папкеproject.Замените существующий код в файле
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, выполняется эта строка, выводящая значение элемента.
Сохраните файл
HelloJava.java(Ctrl+S или Cmd+S).Теперь скомпилируйте модифицированную программу. Откройте терминал внизу WebIDE и выполните следующую команду:
javac HelloJava.javaЕсли нет ошибок, компиляция прошла успешно.
Наконец, запустите скомпилированную программу:
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 для поиска и вывода нулевых элементов.
Откройте файл
HelloJava.javaв редакторе WebIDE.Замените существующий код следующим:
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." для каждого найденного нулевого элемента.
Сохраните файл
HelloJava.java.Скомпилируйте программу в терминале:
javac HelloJava.javaЗапустите программу:
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 еще раз, чтобы подсчитать нулевые элементы и вывести общее количество.
Откройте файл
HelloJava.javaв редакторе WebIDE.Замените существующий код следующим:
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);: Эта строка выводит итоговое количество нулевых элементов.
Сохраните файл
HelloJava.java.Скомпилируйте программу в терминале:
javac HelloJava.javaЗапустите программу:
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.



