Рубрики
Без рубрики

Обработка массивов с помощью Apache Commons Lang 3

Краткое введение в работу с массивами с помощью библиотеки Apache Commons и ArrayUtils.

Автор оригинала: baeldung.

1. Обзор

Библиотека Apache Commons Lang3 обеспечивает поддержку манипулирования основными классами API Java. Эта поддержка включает в себя методы обработки строк, чисел, дат, параллелизма, отражения объектов и многое другое.

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

2. Зависимость Maven

Чтобы использовать библиотеку Commons Lang3, просто извлеките ее из центрального репозитория Maven, используя следующую зависимость:


    org.apache.commons
    commons-lang3
    3.11

Вы можете найти последнюю версию этой библиотеки здесь .

3. ArrayUtils

Класс ArrayUtils предоставляет служебные методы для работы с массивами. Эти методы пытаются изящно обрабатывать входные данные, предотвращая возникновение исключения при передаче значения null .

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

Для удобства их перегруженные варианты также определены для обработки массивов, содержащих примитивные типы.

4. добавить и добавить все

Метод add копирует данный массив и вставляет данный элемент в заданную позицию в новом массиве. Если позиция не указана, новый элемент добавляется в конец массива.

Следующий фрагмент кода вставляет нулевое число в первую позицию массива oldArray и проверяет результат:

int[] oldArray = { 2, 3, 4, 5 };
int[] newArray = ArrayUtils.add(oldArray, 0, 1);
int[] expectedArray = { 1, 2, 3, 4, 5 };
 
assertArrayEquals(expectedArray, newArray);

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

int[] oldArray = { 2, 3, 4, 5 };
int[] newArray = ArrayUtils.add(oldArray, 1);
int[] expectedArray = { 2, 3, 4, 5, 1 };
 
assertArrayEquals(expectedArray, newArray);

Метод addAll добавляет все элементы в конец данного массива. Следующий фрагмент иллюстрирует этот метод и подтверждает результат:

int[] oldArray = { 0, 1, 2 };
int[] newArray = ArrayUtils.addAll(oldArray, 3, 4, 5);
int[] expectedArray = { 0, 1, 2, 3, 4, 5 };
 
assertArrayEquals(expectedArray, newArray);

5. удалить и удалить все

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

Этот метод возвращает новый массив вместо внесения изменений в исходный:

int[] oldArray = { 1, 2, 3, 4, 5 };
int[] newArray = ArrayUtils.remove(oldArray, 1);
int[] expectedArray = { 1, 3, 4, 5 };
 
assertArrayEquals(expectedArray, newArray);

Метод removeAll удаляет все элементы в указанных позициях из данного массива:

int[] oldArray = { 1, 2, 3, 4, 5 };
int[] newArray = ArrayUtils.removeAll(oldArray, 1, 3);
int[] expectedArray = { 1, 3, 5 };
 
assertArrayEquals(expectedArray, newArray);

6. удалить элемент и удалить элементы

Метод removeElement удаляет первое вхождение указанного элемента из данного массива.

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

int[] oldArray = { 1, 2, 3, 3, 4 };
int[] newArray = ArrayUtils.removeElement(oldArray, 3);
int[] expectedArray = { 1, 2, 3, 4 };
 
assertArrayEquals(expectedArray, newArray);

Метод removeelement удаляет первые вхождения указанных элементов из данного массива.

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

int[] oldArray = { 1, 2, 3, 3, 4 };
int[] newArray = ArrayUtils.removeElements(oldArray, 2, 3, 5);
int[] expectedArray = { 1, 3, 4 };
 
assertArrayEquals(expectedArray, newArray);

7. API removeAllOccurences

Метод remove All Occurences удаляет все вхождения указанного элемента из данного массива.

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

int[] oldArray = { 1, 2, 2, 2, 3 };
int[] newArray = ArrayUtils.removeAllOccurences(oldArray, 2);
int[] expectedArray = { 1, 3 };
 
assertArrayEquals(expectedArray, newArray);

8. Содержит API

Метод contains проверяет, существует ли значение в данном массиве. Вот пример кода, включая проверку результата:

int[] array = { 1, 3, 5, 7, 9 };
boolean evenContained = ArrayUtils.contains(array, 2);
boolean oddContained = ArrayUtils.contains(array, 7);
 
assertEquals(false, evenContained);
assertEquals(true, oddContained);

9. Обратный API

Метод reverse изменяет порядок элементов в указанном диапазоне данного массива. Этот метод вносит изменения в переданный массив вместо того, чтобы возвращать новый.

Давайте быстро взглянем на:

int[] originalArray = { 1, 2, 3, 4, 5 };
ArrayUtils.reverse(originalArray, 1, 4);
int[] expectedArray = { 1, 4, 3, 2, 5 };
 
assertArrayEquals(expectedArray, originalArray);

Если диапазон не указан, порядок всех элементов меняется на обратный:

int[] originalArray = { 1, 2, 3, 4, 5 };
ArrayUtils.reverse(originalArray);
int[] expectedArray = { 5, 4, 3, 2, 1 };
 
assertArrayEquals(expectedArray, originalArray);

10. API сдвига

Метод shift сдвигает ряд элементов в заданном массиве на несколько позиций. Этот метод вносит изменения в переданный массив вместо того, чтобы возвращать новый.

Следующий фрагмент кода сдвигает все элементы между элементами с индексом 1 (включительно) и индексом 4 (исключительно) на одну позицию вправо и подтверждает результат:

int[] originalArray = { 1, 2, 3, 4, 5 };
ArrayUtils.shift(originalArray, 1, 4, 1);
int[] expectedArray = { 1, 4, 2, 3, 5 };
 
assertArrayEquals(expectedArray, originalArray);

Если границы диапазона не указаны, все элементы массива сдвигаются:

int[] originalArray = { 1, 2, 3, 4, 5 };
ArrayUtils.shift(originalArray, 1);
int[] expectedArray = { 5, 1, 2, 3, 4 };
 
assertArrayEquals(expectedArray, originalArray);

11. API подмассива

Метод subarray создает новый массив, содержащий элементы в заданном диапазоне данного массива. Ниже приведен пример утверждения результата:

int[] oldArray = { 1, 2, 3, 4, 5 };
int[] newArray = ArrayUtils.subarray(oldArray, 2, 7);
int[] expectedArray = { 3, 4, 5 };
 
assertArrayEquals(expectedArray, newArray);

Обратите внимание, что когда переданный индекс больше длины массива, он понижается до длины массива, а не метод создает исключение. Аналогично, если передается отрицательный индекс, он повышается до нуля.

12. API подкачки

Метод swap меняет местами ряд элементов в заданных позициях в данном массиве.

Следующий фрагмент кода меняет местами две группы элементов, начиная с индексов 0 и 3, причем каждая группа содержит два элемента:

int[] originalArray = { 1, 2, 3, 4, 5 };
ArrayUtils.swap(originalArray, 0, 3, 2);
int[] expectedArray = { 4, 5, 3, 1, 2 };
 
assertArrayEquals(expectedArray, originalArray);

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

int[] originalArray = { 1, 2, 3, 4, 5 };
ArrayUtils.swap(originalArray, 0, 3);
int[] expectedArray = { 4, 2, 3, 1, 5 };
assertArrayEquals(expectedArray, originalArray);

13. Заключение

В этом учебном пособии представлена утилита обработки основных массивов в Apache Commons Lang 3 – ArrayUtils .

Как всегда, реализацию всех примеров и фрагментов кода, приведенных выше, можно найти в проекте GitHub .