Arrayverwerking met Apache Commons Lang 3

1. Overzicht

De Apache Commons Lang 3-bibliotheek biedt ondersteuning voor het manipuleren van kernklassen van de Java-API's. Deze ondersteuning omvat methoden voor het omgaan met tekenreeksen, getallen, datums, gelijktijdigheid, objectreflectie en meer.

In deze korte tutorial zullen we ons concentreren op arrayverwerking met de zeer bruikbare ArrayUtils hulpprogramma klasse.

2. Maven Afhankelijkheid

Om de Commons Lang 3-bibliotheek te gebruiken, haalt u deze gewoon uit de centrale Maven-repository met behulp van de volgende afhankelijkheid:

 org.apache.commons commons-lang3 3.5 

De laatste versie van deze bibliotheek vind je hier.

3. ArrayUtils

De ArrayUtils class biedt hulpprogramma's voor het werken met arrays. Deze methoden proberen de invoer netjes af te handelen door te voorkomen dat er een uitzondering wordt gegenereerd wanneer een nul waarde wordt doorgegeven.

Dit gedeelte illustreert enkele methoden die zijn gedefinieerd in het ArrayUtils klasse. Merk op dat al deze methoden kunnen werken met elk elementtype.

Gemakshalve zijn hun overbelaste smaken ook gedefinieerd voor het hanteren van arrays die primitieve typen bevatten.

4. toevoegen en Voeg alles toe

De toevoegen methode kopieert een gegeven array en voegt een bepaald element op een bepaalde positie in de nieuwe array in. Als de positie niet is opgegeven, wordt het nieuwe element aan het einde van de array toegevoegd.

Het volgende codefragment voegt het getal nul in op de eerste positie van de oldArray array en verifieert het resultaat:

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

Als de positie niet is opgegeven, wordt het extra element toegevoegd aan het einde van oldArray:

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

De Voeg alles toe methode voegt alle elementen toe aan het einde van een gegeven array. Het volgende fragment illustreert deze methode en bevestigt het resultaat:

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

5. verwijderen en Verwijder alles

De verwijderen methode verwijdert een element op een opgegeven positie uit een gegeven array. Alle volgende elementen worden naar links verschoven. Merk op dat dit geldt voor alle verwijderingshandelingen.

Deze methode retourneert een nieuwe array in plaats van wijzigingen aan te brengen in de oorspronkelijke:

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

De Verwijder alles methode verwijdert alle elementen op gespecificeerde posities uit een gegeven array:

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

6. removeElement en removeElements

De removeElement methode verwijdert het eerste exemplaar van een gespecificeerd element uit een gegeven array.

In plaats van een uitzondering te genereren, wordt de verwijderingsoperatie genegeerd als een dergelijk element niet bestaat in de gegeven array:

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

De removeElements methode verwijdert de eerste exemplaren van gespecificeerde elementen uit een gegeven array.

In plaats van een uitzondering te genereren, wordt de verwijderingsbewerking genegeerd als een gespecificeerd element niet bestaat in de gegeven array:

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

7. Het removeAllOccurences API

De removeAllOccurences methode verwijdert alle exemplaren van het opgegeven element uit de opgegeven array.

In plaats van een uitzondering te genereren, wordt de verwijderingsoperatie genegeerd als een dergelijk element niet bestaat in de gegeven array:

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

8. Het bevat API

De bevat methode controleert of een waarde bestaat in een gegeven array. Hier is een codevoorbeeld, inclusief verificatie van het resultaat:

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. Het omgekeerde API

De omgekeerde methode keert de elementvolgorde om binnen een gespecificeerd bereik van een gegeven array. Deze methode brengt wijzigingen aan in de doorgegeven array in plaats van een nieuwe te retourneren.

Laten we snel eens kijken:

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

Als er geen bereik is opgegeven, wordt de volgorde van alle elementen omgekeerd:

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

10. Het verschuiving API

De verschuiving methode verschuift een reeks elementen in een gegeven array een aantal posities. Deze methode brengt wijzigingen aan in de doorgegeven array in plaats van een nieuwe te retourneren.

Het volgende codefragment verschuift alle elementen tussen de elementen op index 1 (inclusief) en index 4 (exclusief) één positie naar rechts en bevestigt het resultaat:

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

Als de bereikgrenzen niet zijn opgegeven, worden alle elementen van de array verschoven:

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

11. Het subarray API

De subarray method maakt een nieuwe array met elementen binnen een gespecificeerd bereik van de gegeven array. Het volgende is een voorbeeld van een bewering van het resultaat:

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

Merk op dat wanneer de doorgegeven index groter is dan de lengte van de array, deze wordt gedegradeerd naar de arraylengte in plaats van dat de methode een uitzondering genereert. Evenzo, als een negatieve index wordt doorgegeven, wordt deze gepromoveerd tot nul.

12. Het ruilen API

De ruilen method verwisselt een reeks elementen op gespecificeerde posities in de gegeven array.

Het volgende codefragment verwisselt twee groepen elementen beginnend bij de indexen 0 en 3, waarbij elke groep twee elementen bevat:

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

Als er geen lengte-argument wordt doorgegeven, wordt slechts één element op elke positie verwisseld:

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

13. Conclusie

Deze tutorial introduceert het hulpprogramma voor kernarrayverwerking in Apache Commons Lang 3 - ArrayUtils.

Zoals altijd is de implementatie van alle bovenstaande voorbeelden en codefragmenten te vinden in het GitHub-project.