Como reverter uma matriz em Java

Como reverter uma matriz em Java

1. Visão geral

Neste artigo rápido, mostraremoshow we can invert an array in Java.

Veremos algumas maneiras diferentes de fazer isso usando soluções puras baseadas em Java 8 - algumas delas alteram um array existente e alguns criam um novo.

A seguir, veremos duas soluções usando bibliotecas externas - uma usandoApache Commons Lange outra usandoGoogle Guava.

2. Definindo o problema

A idéia básica é reverter a ordem dos elementos na matriz. Portanto, se for fornecida a matriz:

fruits = {"apples", "tomatoes", "bananas", "guavas", "pineapples"}

Gostaríamos de obter:

invertedFruits = {"pineapples", "guavas", "bananas", "tomatoes",  "apples"}

Vamos ver algumas maneiras de fazer isso.

3. Usando um loop tradicionalfor

A primeira maneira que podemos pensar em inverter uma matriz é usando um loopfor:

void invertUsingFor(Object[] array) {
    for (int i = 0; i < array.length / 2; i++) {
        Object temp = array[i];
        array[i] = array[array.length - 1 - i];
        array[array.length - 1 - i] = temp;
    }
}

Como podemos ver, o código percorre metade da matriz, alterando os elementos em posições simétricas.

Usamos uma variável temporária para não perdermos o valor da posição atual da matriz durante a iteração.

4. Usando a API Java 8Stream

Também podemos inverter uma matriz usando a API de fluxo:

Object[] invertUsingStreams(Object[] array) {
    return IntStream.rangeClosed(1, array.length)
      .mapToObj(i -> array[array.length - i])
      .toArray();
}

Aqui, usamos o métodoIntStream.range para gerar um fluxo sequencial de números. Em seguida, mapeamos essa sequência em índices de matriz em ordem decrescente.

5. UsandoCollections.reverse()

Vamos ver como inverter um array usando o métodoCollections.reverse():

public void invertUsingCollectionsReverse(Object[] array) {
    List list = Arrays.asList(array);
    Collections.reverse(list);
}


Comparado com os exemplos anteriores, esta é uma maneira mais legível de executar a tarefa.

6. Usando Apache Commons Lang

Outra opção para inverter um array é usar a bibliotecaApache Commons Lang. Para usá-lo, primeiro devemos incluir a biblioteca como uma dependência:


    org.apache.commons
    commons-lang3
    3.5

A versão mais recente deCommons Lang pode ser encontrada emMaven Central.

Vamos usar a classeArrayUtils para inverter a matriz:

public void invertUsingCommonsLang(Object[] array) {
    ArrayUtils.reverse(array);
}

Como podemos ver, esta solução é bastante simples.

7. Usando o Google Guava

Mais uma opção é usar a bibliotecaGoogle Guava. Assim como fizemos comCommons Lang, incluiremos a biblioteca como uma dependência:


    com.google.guava
    guava
    22.0

A versão mais recente pode ser encontrada emMaven Central.

Então, podemos usar o métodoreverse na classeGuava’sLists para inverter a matriz:

public Object[] invertUsingGuava(Object[] array) {
    List list = Arrays.asList(array);
    List reversed = Lists.reverse(list);
    return reversed.toArray();
}




8. Conclusão

Neste artigo, vimos várias maneiras diferentes de inverter uma matriz em Java. Mostramos algumas soluções usando apenas o núcleo do Java e duas outras soluções que usam bibliotecas de terceiros -Commons LangeGuava.

Todos os exemplos de código mostrados aqui podem serfound on GitHub - este é um projeto Maven, portanto, deve ser fácil de importar e executar como está.