Converter Lista de Inteiros para Array de Inteiros

JavaBeginner
Pratique Agora

Introdução

Este laboratório irá guiá-lo através do processo de conversão de uma Lista de Inteiros (Integer List) para um Array de inteiros (int Array) em Java. Esta é uma tarefa comum na programação Java quando você precisa trabalhar com arrays primitivos após coletar dados em uma Lista.

Exploraremos duas abordagens diferentes para realizar esta conversão:

  1. Usando a API Stream do Java com o método stream.mapToInt()
  2. Usando o método ArrayUtils.toPrimitive() da Apache Commons Lang

Ao final deste laboratório, você entenderá ambos os métodos e poderá aplicá-los em suas próprias aplicações Java.

Criar uma Classe Java para Nosso Experimento

Neste primeiro passo, criaremos uma classe Java para demonstrar os métodos de conversão. Usaremos o Maven para gerenciar nossas dependências e a estrutura do projeto.

  1. Primeiro, verifique se você está no diretório do projeto:
cd /home/labex/project
  1. Crie um novo arquivo Java no diretório de origem do Maven:
cd src/main/java
Criar Arquivo Java
  1. Crie IntegerListToIntArray.java com o seguinte conteúdo:
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.ArrayUtils;

public class IntegerListToIntArray {
    public static void main(String[] args) {
        System.out.println("Demonstração de Conversão de Lista de Inteiros para Array de int");
        System.out.println("---------------------------------------");

        // Adicionaremos nosso código aqui nos passos seguintes
    }
}
  1. Compile o código usando o Maven:
cd /home/labex/project
mvn compile
  1. Execute o programa para verificar se ele funciona:
mvn exec:java

Você deve ver o texto do cabeçalho impresso no console. Se não houver erros, você está pronto para passar para o próximo passo.

Neste passo, criaremos uma Lista de Integer e adicionaremos alguns números a ela. Antes de começarmos a codificar, vamos entender por que precisamos desta conversão.

Por que Converter entre Lista de Inteiros e Array de int?

Em Java, temos duas maneiras de trabalhar com números:

  1. Tipo Primitivo (int):

    • Tipo numérico básico que armazena apenas o número
    • Usa menos memória
    • Não pode ser usado diretamente em coleções como List
    • Exemplo: int x = 5;
  2. Classe Wrapper (Integer):

    • Objeto que contém um número
    • Pode ser usado em coleções como List
    • Possui métodos e recursos adicionais
    • Exemplo: Integer x = 5;

Frequentemente, coletamos números em uma Lista (que requer Integer), mas alguns métodos precisam de um array int primitivo para melhor desempenho. É por isso que precisamos converter entre eles.

Atualizar o Código Java

Vamos modificar nosso arquivo IntegerListToIntArray.java para criar e exibir uma lista de números:

  1. Certifique-se de estar no diretório do projeto:
cd /home/labex/project
  1. Abra src/main/java/IntegerListToIntArray.java e adicione o seguinte código dentro do método main, após as instruções de impressão existentes:
// Criar uma Lista de objetos Integer
List<Integer> integerList = new ArrayList<>();

// Adicionar alguns números à lista
integerList.add(1);
integerList.add(2);
integerList.add(3);
integerList.add(4);
integerList.add(5);

// Exibir o conteúdo da lista
System.out.println("Lista de Inteiros Original:");
for (Integer num : integerList) {
    System.out.print(num + " ");
}
System.out.println("\n");
Adicionar números à lista
  1. Compile e execute o programa:
mvn compile
mvn exec:java

Você deve ver uma saída semelhante a esta:

Converting Integer List to int Array Demo
---------------------------------------
Original Integer List:
1 2 3 4 5

Esta saída confirma que criamos com sucesso uma Lista de Integer e a preenchemos com números. No próximo passo, aprenderemos como converter esta lista em um array int primitivo.

Converter Lista para Array Usando a API Stream

Neste passo, aprenderemos nosso primeiro método para converter uma Lista de Integer em um array int usando a API Stream do Java. A API Stream fornece uma maneira moderna e eficiente de processar coleções de dados.

Entendendo Streams Java

Um Stream em Java é como um pipeline que pode processar dados passo a passo:

  • Ele pega dados de uma fonte (nossa Lista)
  • Processa os dados (converte Integer para int)
  • Coleta os resultados (em um array)

Adicionar o Código de Conversão

  1. Certifique-se de estar no diretório do projeto:
cd /home/labex/project
  1. Abra src/main/java/IntegerListToIntArray.java e adicione este código após o código de criação da sua lista:
// Método 1: Usando a API Stream
System.out.println("Convertendo usando a API Stream:");

// Converter Lista de Integer para array int usando Stream
int[] intArrayUsingStream = integerList.stream()    // Criar um stream da lista
                                     .mapToInt(Integer::intValue)  // Converter Integer para int
                                     .toArray();    // Coletar resultados em um array

// Imprimir o array convertido
System.out.println("Array int Convertido:");
for (int value : intArrayUsingStream) {
    System.out.print(value + " ");
}
System.out.println("\n");
  1. Compile e execute o programa:
mvn compile
mvn exec:java

Você deve ver uma saída como esta:

Converting Integer List to int Array Demo
---------------------------------------
Original Integer List:
1 2 3 4 5

Converting using Stream API:
Converted int Array:
1 2 3 4 5

Entendendo o Código

Vamos detalhar como a conversão funciona:

  1. integerList.stream() - Cria um stream da nossa lista
  2. .mapToInt(Integer::intValue) - Converte cada Integer em um int
  3. .toArray() - Coleta todos os valores int em um array

Integer::intValue é chamado de referência de método (method reference). É uma forma abreviada de escrever number -> number.intValue().

Converter Lista para Array Usando ArrayUtils

Neste passo, aprenderemos um segundo método para converter nossa lista usando a classe ArrayUtils da biblioteca Apache Commons Lang. Este método é mais direto e pode ser mais fácil de entender para iniciantes.

Entendendo ArrayUtils

A classe ArrayUtils fornece muitos métodos úteis para trabalhar com arrays. O método toPrimitive() especificamente nos ajuda a converter de tipos wrapper (como Integer) para tipos primitivos (como int).

Adicionar o Código de Conversão ArrayUtils

  1. Adicione este código ao seu arquivo IntegerListToIntArray.java após o código da API Stream:
// Método 2: Usando ArrayUtils
System.out.println("Convertendo usando ArrayUtils:");

// Primeiro, converta List<Integer> para Integer[]
Integer[] intermediateArray = integerList.toArray(new Integer[0]);

// Então, converta Integer[] para int[]
int[] intArrayUsingArrayUtils = ArrayUtils.toPrimitive(intermediateArray);

// Imprimir o array convertido
System.out.println("Array int Convertido:");
for (int value : intArrayUsingArrayUtils) {
    System.out.print(value + " ");
}
System.out.println("\n");
  1. Compile e execute o programa:
mvn compile
mvn exec:java

Você agora deve ver ambos os métodos de conversão na saída:

Converting Integer List to int Array Demo
---------------------------------------
Original Integer List:
1 2 3 4 5

Converting using Stream API:
Converted int Array:
1 2 3 4 5

Converting using ArrayUtils:
Converted int Array:
1 2 3 4 5

Entendendo o Código

O método ArrayUtils funciona em duas etapas:

  1. integerList.toArray(new Integer[0]) - Converte a Lista em um array de objetos Integer
  2. ArrayUtils.toPrimitive() - Converte o array de Integer em um array de int

Este método é mais direto, mas requer a biblioteca Apache Commons Lang.

Resumo

Neste laboratório, você aprendeu duas maneiras diferentes de converter uma Lista de Integer em um Array de int em Java:

  1. Usando a API Stream do Java:
int[] array = integerList.stream().mapToInt(Integer::intValue).toArray();
  • Abordagem moderna e funcional
  • Integrada ao Java
  • Boa para processar dados em etapas
  1. Usando o ArrayUtils da Apache Commons Lang:
int[] array = ArrayUtils.toPrimitive(integerList.toArray(new Integer[0]));
  • Abordagem mais direta
  • Requer biblioteca externa
  • Fácil de entender e usar

Ambos os métodos alcançam o mesmo resultado, e você pode escolher aquele que melhor se adapta às suas necessidades:

  • Use a API Stream quando você quiser uma abordagem moderna e funcional
  • Use ArrayUtils quando você quiser um código mais simples e legível

Agora você tem o conhecimento para converter entre Listas de Integer e arrays de int em suas aplicações Java.