Array-Verarbeitung mit Apache Commons Lang 3
1. Überblick
DieApache Commons Lang 3-Bibliothek bietet Unterstützung für die Manipulation von Kernklassen der Java-APIs. Diese Unterstützung umfasst Methoden zum Behandeln von Zeichenfolgen, Zahlen, Datumsangaben, Parallelität, Objektreflexion und vielem mehr.
In diesem kurzen Tutorial konzentrieren wir uns auf die Array-Verarbeitung mit der sehr nützlichen DienstprogrammklasseArrayUtils.
2. Maven-Abhängigkeit
Um die Commons Lang 3-Bibliothek zu verwenden, ziehen Sie sie einfach mit der folgenden Abhängigkeit aus dem zentralen Maven-Repository:
org.apache.commons
commons-lang3
3.5
Sie finden die neueste Version dieser Bibliothekhere.
3. ArrayUtils
Die KlasseArrayUtilsbietet Dienstprogrammmethoden für die Arbeit mit Arrays. Diese Methoden versuchen, die Eingabe ordnungsgemäß zu verarbeiten, indem sie verhindern, dass eine Ausnahme ausgelöst wird, wenn einnull-Wert übergeben wird.
Dieser Abschnitt zeigt einige Methoden, die in der KlasseArrayUtilsdefiniert sind. Beachten Sie, dass alle diese Methoden mit jedem Elementtyp funktionieren können.
Der Einfachheit halber sind ihre überladenen Aromen auch für die Behandlung von Arrays mit primitiven Typen definiert.
4. add undaddAll
Die Methodeadd kopiert ein bestimmtes Array und fügt ein bestimmtes Element an einer bestimmten Position in das neue Array ein. Wenn die Position nicht angegeben ist, wird das neue Element am Ende des Arrays hinzugefügt.
Das folgende Codefragment fügt die Zahl Null an der ersten Position des ArraysoldArrayein und überprüft das Ergebnis:
int[] oldArray = { 2, 3, 4, 5 };
int[] newArray = ArrayUtils.add(oldArray, 0, 1);
int[] expectedArray = { 1, 2, 3, 4, 5 };
assertArrayEquals(expectedArray, newArray);
Wenn die Position nicht angegeben ist, wird das zusätzliche Element am Ende vonoldArray hinzugefügt:
int[] oldArray = { 2, 3, 4, 5 };
int[] newArray = ArrayUtils.add(oldArray, 1);
int[] expectedArray = { 2, 3, 4, 5, 1 };
assertArrayEquals(expectedArray, newArray);
Die MethodeaddAll fügt alle Elemente am Ende eines bestimmten Arrays hinzu. Das folgende Fragment veranschaulicht diese Methode und bestätigt das Ergebnis:
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 undremoveAll
Die Methoderemove entfernt ein Element an einer bestimmten Position aus einem bestimmten Array. Alle nachfolgenden Elemente werden nach links verschoben. Beachten Sie, dass dies für alle Entfernungsvorgänge gilt.
Diese Methode gibt ein neues Array zurück, anstatt das ursprüngliche zu ändern:
int[] oldArray = { 1, 2, 3, 4, 5 };
int[] newArray = ArrayUtils.remove(oldArray, 1);
int[] expectedArray = { 1, 3, 4, 5 };
assertArrayEquals(expectedArray, newArray);
Die MethoderemoveAll entfernt alle Elemente an bestimmten Positionen aus einem bestimmten Array:
int[] oldArray = { 1, 2, 3, 4, 5 };
int[] newArray = ArrayUtils.removeAll(oldArray, 1, 3);
int[] expectedArray = { 1, 3, 5 };
assertArrayEquals(expectedArray, newArray);
6. removeElement undremoveElements
Die MethoderemoveElement entfernt das erste Auftreten eines angegebenen Elements aus einem bestimmten Array.
Anstatt eine Ausnahme auszulösen, wird der Entfernungsvorgang ignoriert, wenn ein solches Element in dem angegebenen Array nicht vorhanden ist:
int[] oldArray = { 1, 2, 3, 3, 4 };
int[] newArray = ArrayUtils.removeElement(oldArray, 3);
int[] expectedArray = { 1, 2, 3, 4 };
assertArrayEquals(expectedArray, newArray);
Die MethoderemoveElements entfernt die ersten Vorkommen angegebener Elemente aus einem bestimmten Array.
Anstatt eine Ausnahme auszulösen, wird der Entfernungsvorgang ignoriert, wenn ein bestimmtes Element im angegebenen Array nicht vorhanden ist:
int[] oldArray = { 1, 2, 3, 3, 4 };
int[] newArray = ArrayUtils.removeElements(oldArray, 2, 3, 5);
int[] expectedArray = { 1, 3, 4 };
assertArrayEquals(expectedArray, newArray);
7. DieremoveAllOccurences API
Die MethoderemoveAllOccurences entfernt alle Vorkommen des angegebenen Elements aus dem angegebenen Array.
Anstatt eine Ausnahme auszulösen, wird der Entfernungsvorgang ignoriert, wenn ein solches Element in dem angegebenen Array nicht vorhanden ist:
int[] oldArray = { 1, 2, 2, 2, 3 };
int[] newArray = ArrayUtils.removeAllOccurences(oldArray, 2);
int[] expectedArray = { 1, 3 };
assertArrayEquals(expectedArray, newArray);
8. Diecontains API
Die Methodecontainsprüft, ob in einem bestimmten Array ein Wert vorhanden ist. Hier ist ein Codebeispiel, einschließlich der Überprüfung des Ergebnisses:
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. Diereverse API
Die Methodereverse kehrt die Elementreihenfolge innerhalb eines bestimmten Bereichs eines bestimmten Arrays um. Diese Methode nimmt Änderungen am übergebenen Array vor, anstatt ein neues zurückzugeben.
Werfen wir einen kurzen Blick darauf:
int[] originalArray = { 1, 2, 3, 4, 5 };
ArrayUtils.reverse(originalArray, 1, 4);
int[] expectedArray = { 1, 4, 3, 2, 5 };
assertArrayEquals(expectedArray, originalArray);
Wenn kein Bereich angegeben wird, wird die Reihenfolge aller Elemente umgekehrt:
int[] originalArray = { 1, 2, 3, 4, 5 };
ArrayUtils.reverse(originalArray);
int[] expectedArray = { 5, 4, 3, 2, 1 };
assertArrayEquals(expectedArray, originalArray);
10. Dieshift API
Dieshift-Methode verschiebt eine Reihe von Elementen in einem bestimmten Array um mehrere Positionen. Diese Methode nimmt Änderungen am übergebenen Array vor, anstatt ein neues zurückzugeben.
Das folgende Codefragment verschiebt alle Elemente zwischen den Elementen bei Index 1 (einschließlich) und Index 4 (ausschließlich) um eine Position nach rechts und bestätigt das Ergebnis:
int[] originalArray = { 1, 2, 3, 4, 5 };
ArrayUtils.shift(originalArray, 1, 4, 1);
int[] expectedArray = { 1, 4, 2, 3, 5 };
assertArrayEquals(expectedArray, originalArray);
Wenn die Bereichsgrenzen nicht angegeben sind, werden alle Elemente des Arrays verschoben:
int[] originalArray = { 1, 2, 3, 4, 5 };
ArrayUtils.shift(originalArray, 1);
int[] expectedArray = { 5, 1, 2, 3, 4 };
assertArrayEquals(expectedArray, originalArray);
11. Diesubarray API
Die Methodesubarray erstellt ein neues Array, das Elemente innerhalb eines bestimmten Bereichs des angegebenen Arrays enthält. Das Folgende ist ein Beispiel für eine Behauptung des Ergebnisses:
int[] oldArray = { 1, 2, 3, 4, 5 };
int[] newArray = ArrayUtils.subarray(oldArray, 2, 7);
int[] expectedArray = { 3, 4, 5 };
assertArrayEquals(expectedArray, newArray);
Beachten Sie, dass der übergebene Index, wenn er größer als die Länge des Arrays ist, auf die Länge des Arrays herabgestuft wird, anstatt dass die Methode eine Ausnahme auslöst. In ähnlicher Weise wird ein negativer Index auf Null hochgestuft, wenn er übergeben wird.
12. Dieswap API
Die Methodeswap tauscht eine Reihe von Elementen an bestimmten Positionen im angegebenen Array aus.
Das folgende Codefragment tauscht zwei Elementgruppen aus, beginnend mit den Indizes 0 und 3, wobei jede Gruppe zwei Elemente enthält:
int[] originalArray = { 1, 2, 3, 4, 5 };
ArrayUtils.swap(originalArray, 0, 3, 2);
int[] expectedArray = { 4, 5, 3, 1, 2 };
assertArrayEquals(expectedArray, originalArray);
Wenn kein Längenargument übergeben wird, wird nur ein Element an jeder Position ausgetauscht:
int[] originalArray = { 1, 2, 3, 4, 5 };
ArrayUtils.swap(originalArray, 0, 3);
int[] expectedArray = { 4, 2, 3, 1, 5 };
assertArrayEquals(expectedArray, originalArray);
13. Fazit
In diesem Tutorial wird das Kerndienstprogramm zur Array-Verarbeitung in Apache Commons Lang 3 -ArrayUtils vorgestellt.
Wie immer ist die Implementierung aller oben angegebenen Beispiele und Codefragmente inthe GitHub project zu finden.