Processamento de matriz com Apache Commons Lang 3

Processamento de matriz com Apache Commons Lang 3

1. Visão geral

A bibliotecaApache Commons Lang 3 fornece suporte para manipulação de classes principais das APIs Java. Esse suporte inclui métodos para lidar com seqüências de caracteres, números, datas, simultaneidade, reflexão de objetos e muito mais.

Neste tutorial rápido, vamos nos concentrar no processamento de array com a classe de utilitárioArrayUtils muito útil.

2. Dependência do Maven

Para usar a biblioteca Commons Lang 3, basta retirá-la do repositório central do Maven usando a seguinte dependência:


    org.apache.commons
    commons-lang3
    3.5

Você pode encontrar a versão mais recente desta bibliotecahere.

3. ArrayUtils

A classeArrayUtils fornece métodos utilitários para trabalhar com matrizes. Esses métodos tentam lidar com a entrada normalmente, evitando que uma exceção seja lançada quando um valornull é passado.

Esta seção ilustra alguns métodos definidos na classeArrayUtils. Observe que todos esses métodos podem funcionar com qualquer tipo de elemento.

Por conveniência, seus sabores sobrecarregados também são definidos para manipular matrizes contendo tipos primitivos.

4. add eaddAll

O métodoadd copia uma determinada matriz e insere um determinado elemento em uma determinada posição na nova matriz. Se a posição não for especificada, o novo elemento será adicionado no final da matriz.

O fragmento de código a seguir insere o número zero na primeira posição da matrizoldArray e verifica o resultado:

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

assertArrayEquals(expectedArray, newArray);

Se a posição não for especificada, o elemento adicional será adicionado ao final deoldArray:

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

assertArrayEquals(expectedArray, newArray);

O métodoaddAll adiciona todos os elementos no final de um determinado array. O fragmento a seguir ilustra esse método e confirma o resultado:

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 eremoveAll

O métodoremove remove um elemento em uma posição especificada de uma determinada matriz. Todos os elementos subsequentes são deslocados para a esquerda. Observe que isso é verdade para todas as operações de remoção.

Este método retorna uma nova matriz em vez de fazer alterações na original:

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

assertArrayEquals(expectedArray, newArray);

O métodoremoveAll remove todos os elementos nas posições especificadas de uma determinada matriz:

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

assertArrayEquals(expectedArray, newArray);

6. removeElement eremoveElements

O métodoremoveElement remove a primeira ocorrência de um elemento especificado de uma determinada matriz.

Em vez de lançar uma exceção, a operação de remoção será ignorada se esse elemento não existir na matriz especificada:

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

assertArrayEquals(expectedArray, newArray);

O métodoremoveElements remove as primeiras ocorrências de elementos especificados de uma determinada matriz.

Em vez de lançar uma exceção, a operação de remoção será ignorada se um elemento especificado não existir na matriz especificada:

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

assertArrayEquals(expectedArray, newArray);

7. A APIremoveAllOccurences

O métodoremoveAllOccurences remove todas as ocorrências do elemento especificado da matriz fornecida.

Em vez de lançar uma exceção, a operação de remoção será ignorada se esse elemento não existir na matriz especificada:

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

assertArrayEquals(expectedArray, newArray);

8. A APIcontains

O métodocontains verifica se um valor existe em uma determinada matriz. Aqui está um exemplo de código, incluindo a verificação do resultado:

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. A APIreverse

O métodoreverse inverte a ordem dos elementos dentro de um intervalo especificado de uma determinada matriz. Este método faz alterações na matriz passada em vez de retornar uma nova.

Vamos dar uma olhada rápida em:

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

assertArrayEquals(expectedArray, originalArray);

Se um intervalo não for especificado, a ordem de todos os elementos será revertida:

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

assertArrayEquals(expectedArray, originalArray);

10. A APIshift

O métodoshift muda uma série de elementos em uma determinada matriz por várias posições. Este método faz alterações na matriz passada em vez de retornar uma nova.

O seguinte fragmento de código alterna todos os elementos entre os elementos do índice 1 (inclusive) e do índice 4 (exclusivo) uma posição para a direita e confirma o resultado:

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

assertArrayEquals(expectedArray, originalArray);

Se os limites do intervalo não forem especificados, todos os elementos da matriz serão alterados:

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

assertArrayEquals(expectedArray, originalArray);

11. A APIsubarray

O métodosubarray cria uma nova matriz contendo elementos dentro de um intervalo especificado da matriz fornecida. A seguir, é apresentado um exemplo de asserção do resultado:

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

assertArrayEquals(expectedArray, newArray);

Observe que, quando o índice transmitido é maior que o comprimento da matriz, ele é rebaixado para o comprimento da matriz, em vez de o método lançar uma exceção. Da mesma forma, se um índice negativo for passado, ele será promovido para zero.

12. A APIswap

O métodoswap troca uma série de elementos em posições especificadas na matriz fornecida.

O fragmento de código a seguir troca dois grupos de elementos começando nos índices 0 e 3, com cada grupo contendo dois elementos:

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

assertArrayEquals(expectedArray, originalArray);

Se nenhum argumento de comprimento for passado, apenas um elemento em cada posição será trocado:

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

13. Conclusão

Este tutorial apresenta o utilitário de processamento de array principal no Apache Commons Lang 3 -ArrayUtils.

Como sempre, a implementação de todos os exemplos e trechos de código fornecidos acima pode ser encontrada emthe GitHub project.