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

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

1. обзор

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

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

2. Maven Dependency

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


    org.apache.commons
    commons-lang3
    3.5

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

3. ArrayUtilsс

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

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

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

4. add иaddAll

Метод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);

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

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 иremoveAll

Метод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 иremoveElements

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

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

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

assertArrayEquals(expectedArray, newArray);

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

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

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

assertArrayEquals(expectedArray, newArray);

7. APIremoveAllOccurences

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

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

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

assertArrayEquals(expectedArray, newArray);

8. APIcontains

Метод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. APIreverse

Метод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. APIshift

Метод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. APIsubarray

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

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

assertArrayEquals(expectedArray, newArray);

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

12. APIswap

Метод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.

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