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 .