1. Обзор
Библиотека Apache Commons Lang 3 обеспечивает поддержку манипулирования основными классами API Java. Эта поддержка включает методы для обработки строк, чисел, дат, параллелизма, отражения объектов и многого другого.
В этом кратком руководстве мы сосредоточимся на обработке массивов с помощью очень полезного служебного класса ArrayUtils .
2. Зависимость от Maven
Чтобы использовать библиотеку Commons Lang 3, просто извлеките ее из центрального репозитория Maven, используя следующую зависимость:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
Вы можете найти последнюю версию этой библиотеки здесь .
3. ArrayUtils
Класс ArrayUtils
предоставляет служебные методы для работы с массивами. Эти методы пытаются изящно обработать ввод, предотвращая создание исключения при передаче нулевого
значения.
В этом разделе показаны некоторые методы, определенные в классе 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);
Если позиция не указана, в конец 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
удаляет элемент в указанной позиции из заданного массива. Все последующие элементы сдвигаются влево. Обратите внимание, что это верно для всех операций удаления.
Этот метод возвращает новый массив вместо внесения изменений в исходный:
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);
Метод 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. API removeAllOccurences
Метод removeAllOccurences
удаляет все вхождения указанного элемента из заданного массива.
Вместо того, чтобы генерировать исключение, операция удаления игнорируется, если такой элемент не существует в данном массиве:
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
Метод сдвига
сдвигает ряд элементов в заданном массиве на несколько позиций. Этот метод вносит изменения в переданный массив вместо того, чтобы возвращать новый.
Следующий фрагмент кода сдвигает все элементы между элементами с индексом 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 подмассива
Метод подмассива
создает новый массив, содержащий элементы в указанном диапазоне данного массива. Ниже приведен пример утверждения результата:
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 .