Traitement de tableaux avec Apache Commons Lang 3
1. Vue d'ensemble
La bibliothèqueApache Commons Lang 3 prend en charge la manipulation des classes principales des API Java. Cette prise en charge inclut des méthodes de traitement des chaînes, des nombres, des dates, de la simultanéité, de la réflexion d’objets, etc.
Dans ce rapide tutoriel, nous allons nous concentrer sur le traitement des tableaux avec la classe utilitaire très utileArrayUtils.
2. Dépendance Maven
Pour utiliser la bibliothèque Commons Lang 3, extrayez-la simplement du référentiel central Maven en utilisant la dépendance suivante:
org.apache.commons
commons-lang3
3.5
Vous pouvez trouver la dernière version de cette bibliothèquehere.
3. ArrayUtils
La classeArrayUtils fournit des méthodes utilitaires pour travailler avec des tableaux. Ces méthodes tentent de gérer l'entrée correctement en empêchant qu'une exception soit levée lorsqu'une valeurnull est transmise.
Cette section illustre certaines méthodes définies dans la classeArrayUtils. Notez que toutes ces méthodes peuvent fonctionner avec n'importe quel type d'élément.
Par commodité, leurs versions surchargées sont également définies pour la gestion des tableaux contenant des types primitifs.
4. add etaddAll
La méthodeadd copie un tableau donné et insère un élément donné à une position donnée dans le nouveau tableau. Si la position n'est pas spécifiée, le nouvel élément est ajouté à la fin du tableau.
Le fragment de code suivant insère le nombre zéro à la première position du tableauoldArray et vérifie le résultat:
int[] oldArray = { 2, 3, 4, 5 };
int[] newArray = ArrayUtils.add(oldArray, 0, 1);
int[] expectedArray = { 1, 2, 3, 4, 5 };
assertArrayEquals(expectedArray, newArray);
Si la position n'est pas spécifiée, l'élément supplémentaire est ajouté à la fin deoldArray:
int[] oldArray = { 2, 3, 4, 5 };
int[] newArray = ArrayUtils.add(oldArray, 1);
int[] expectedArray = { 2, 3, 4, 5, 1 };
assertArrayEquals(expectedArray, newArray);
La méthodeaddAll ajoute tous les éléments à la fin d'un tableau donné. Le fragment suivant illustre cette méthode et confirme le résultat:
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 etremoveAll
La méthoderemove supprime un élément à une position spécifiée d'un tableau donné. Tous les éléments suivants sont décalés vers la gauche. Notez que cela est vrai pour toutes les opérations de suppression.
Cette méthode retourne un nouveau tableau au lieu d’apporter des modifications à l’original:
int[] oldArray = { 1, 2, 3, 4, 5 };
int[] newArray = ArrayUtils.remove(oldArray, 1);
int[] expectedArray = { 1, 3, 4, 5 };
assertArrayEquals(expectedArray, newArray);
La méthoderemoveAll supprime tous les éléments aux positions spécifiées d'un tableau donné:
int[] oldArray = { 1, 2, 3, 4, 5 };
int[] newArray = ArrayUtils.removeAll(oldArray, 1, 3);
int[] expectedArray = { 1, 3, 5 };
assertArrayEquals(expectedArray, newArray);
6. removeElement etremoveElements
La méthoderemoveElement supprime la première occurrence d'un élément spécifié d'un tableau donné.
Au lieu de lancer une exception, l'opération de suppression est ignorée si un tel élément n'existe pas dans le tableau donné:
int[] oldArray = { 1, 2, 3, 3, 4 };
int[] newArray = ArrayUtils.removeElement(oldArray, 3);
int[] expectedArray = { 1, 2, 3, 4 };
assertArrayEquals(expectedArray, newArray);
La méthoderemoveElements supprime les premières occurrences des éléments spécifiés d'un tableau donné.
Au lieu de lancer une exception, l'opération de suppression est ignorée si un élément spécifié n'existe pas dans le tableau donné:
int[] oldArray = { 1, 2, 3, 3, 4 };
int[] newArray = ArrayUtils.removeElements(oldArray, 2, 3, 5);
int[] expectedArray = { 1, 3, 4 };
assertArrayEquals(expectedArray, newArray);
7. L'APIremoveAllOccurences
La méthoderemoveAllOccurences supprime toutes les occurrences de l'élément spécifié du tableau donné.
Au lieu de lancer une exception, l'opération de suppression est ignorée si un tel élément n'existe pas dans le tableau donné:
int[] oldArray = { 1, 2, 2, 2, 3 };
int[] newArray = ArrayUtils.removeAllOccurences(oldArray, 2);
int[] expectedArray = { 1, 3 };
assertArrayEquals(expectedArray, newArray);
8. L'APIcontains
La méthodecontains vérifie si une valeur existe dans un tableau donné. Voici un exemple de code, incluant la vérification du résultat:
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. L'APIreverse
La méthodereverse inverse l'ordre des éléments dans une plage spécifiée d'un tableau donné. Cette méthode modifie le tableau transmis au lieu d'en renvoyer un nouveau.
Jetons un coup d'œil à un rapide:
int[] originalArray = { 1, 2, 3, 4, 5 };
ArrayUtils.reverse(originalArray, 1, 4);
int[] expectedArray = { 1, 4, 3, 2, 5 };
assertArrayEquals(expectedArray, originalArray);
Si aucune plage n'est spécifiée, l'ordre de tous les éléments est inversé:
int[] originalArray = { 1, 2, 3, 4, 5 };
ArrayUtils.reverse(originalArray);
int[] expectedArray = { 5, 4, 3, 2, 1 };
assertArrayEquals(expectedArray, originalArray);
10. L'APIshift
La méthodeshift décale une série d'éléments dans un tableau donné d'un certain nombre de positions. Cette méthode modifie le tableau transmis au lieu d'en renvoyer un nouveau.
Le fragment de code suivant décale tous les éléments entre les éléments d'index 1 (inclus) et d'index 4 (exclusif) d'une position à droite et confirme le résultat:
int[] originalArray = { 1, 2, 3, 4, 5 };
ArrayUtils.shift(originalArray, 1, 4, 1);
int[] expectedArray = { 1, 4, 2, 3, 5 };
assertArrayEquals(expectedArray, originalArray);
Si les limites de la plage ne sont pas spécifiées, tous les éléments du tableau sont décalés:
int[] originalArray = { 1, 2, 3, 4, 5 };
ArrayUtils.shift(originalArray, 1);
int[] expectedArray = { 5, 1, 2, 3, 4 };
assertArrayEquals(expectedArray, originalArray);
11. L'APIsubarray
La méthodesubarray crée un nouveau tableau contenant des éléments dans une plage spécifiée du tableau donné. Voici un exemple d'assertion du résultat:
int[] oldArray = { 1, 2, 3, 4, 5 };
int[] newArray = ArrayUtils.subarray(oldArray, 2, 7);
int[] expectedArray = { 3, 4, 5 };
assertArrayEquals(expectedArray, newArray);
Notez que lorsque l'index transmis est supérieur à la longueur du tableau, il est rétrogradé à la longueur du tableau au lieu que la méthode lève une exception. De même, si un indice négatif est entré, il est promu à zéro.
12. L'APIswap
La méthodeswap permute une série d'éléments à des positions spécifiées dans le tableau donné.
Le fragment de code suivant permute deux groupes d'éléments en commençant par les index 0 et 3, chaque groupe contenant deux éléments:
int[] originalArray = { 1, 2, 3, 4, 5 };
ArrayUtils.swap(originalArray, 0, 3, 2);
int[] expectedArray = { 4, 5, 3, 1, 2 };
assertArrayEquals(expectedArray, originalArray);
Si aucun argument de longueur n'est passé, un seul élément à chaque position est échangé:
int[] originalArray = { 1, 2, 3, 4, 5 };
ArrayUtils.swap(originalArray, 0, 3);
int[] expectedArray = { 4, 2, 3, 1, 5 };
assertArrayEquals(expectedArray, originalArray);
13. Conclusion
Ce didacticiel présente l'utilitaire de traitement des tableaux de base dans Apache Commons Lang 3 -ArrayUtils.
Comme toujours, l'implémentation de tous les exemples et extraits de code donnés ci-dessus peut être trouvée dansthe GitHub project.