Convertir una lista de Integer a una matriz de int

JavaBeginner
Practicar Ahora

Introducción

Este laboratorio lo guiará a través del proceso de convertir una lista de enteros (Integer List) en una matriz de enteros (int Array) en Java. Esta es una tarea común en la programación Java cuando se necesita trabajar con matrices primitivas después de recopilar datos en una lista.

Exploraremos dos enfoques diferentes para lograr esta conversión:

  1. Utilizando la API de flujos (Stream API) de Java con el método stream.mapToInt()
  2. Utilizando el método ArrayUtils.toPrimitive() de Apache Commons Lang

Al final de este laboratorio, entenderá ambos métodos y podrá aplicarlos en sus propias aplicaciones Java.

Crea una clase Java para nuestro experimento

En este primer paso, crearemos una clase Java para demostrar los métodos de conversión. Utilizaremos Maven para gestionar nuestras dependencias y la estructura del proyecto.

  1. Primero, verifica que estés en el directorio del proyecto:
cd /home/labex/project
  1. Crea un nuevo archivo Java en el directorio de origen de Maven:
cd src/main/java
Create Java File
  1. Crea IntegerListToIntArray.java con el siguiente contenido:
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("Converting Integer List to int Array Demo");
        System.out.println("---------------------------------------");

        // We'll add our code here in the following steps
    }
}
  1. Compila el código utilizando Maven:
cd /home/labex/project
mvn compile
  1. Ejecuta el programa para verificar que funcione:
mvn exec:java

Deberías ver el texto del encabezado impreso en la consola. Si no hay errores, estás listo para pasar al siguiente paso.

Crea y llena una lista de Integer

En este paso, crearemos una lista de enteros (Integer List) y le agregaremos algunos números. Antes de comenzar a codificar, entendamos por qué necesitamos esta conversión.

¿Por qué convertir entre una lista de enteros (Integer List) y una matriz de enteros (int Array)?

En Java, tenemos dos formas de trabajar con números:

  1. Tipo primitivo (int):

    • Tipo de número básico que almacena solo el número.
    • Utiliza menos memoria.
    • No se puede usar directamente en colecciones como List.
    • Ejemplo: int x = 5;
  2. Clase envolvente (Integer):

    • Objeto que contiene un número.
    • Se puede usar en colecciones como List.
    • Tiene métodos y características adicionales.
    • Ejemplo: Integer x = 5;

A menudo recopilamos números en una lista (que requiere Integer), pero algunos métodos necesitan una matriz primitiva de enteros (int array) para un mejor rendimiento. Por eso necesitamos convertir entre ellos.

Actualizar el código Java

Modifiquemos nuestro archivo IntegerListToIntArray.java para crear y mostrar una lista de números:

  1. Asegúrate de estar en el directorio del proyecto:
cd /home/labex/project
  1. Abre src/main/java/IntegerListToIntArray.java y agrega el siguiente código dentro del método main, después de las declaraciones de impresión existentes:
// Create a List of Integer objects
List<Integer> integerList = new ArrayList<>();

// Add some numbers to the list
integerList.add(1);
integerList.add(2);
integerList.add(3);
integerList.add(4);
integerList.add(5);

// Display the list contents
System.out.println("Original Integer List:");
for (Integer num : integerList) {
    System.out.print(num + " ");
}
System.out.println("\n");
Add numbers to the list
  1. Compila y ejecuta el programa:
mvn compile
mvn exec:java

Deberías ver una salida similar a esta:

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

Esta salida confirma que hemos creado exitosamente una lista de enteros (Integer List) y la hemos llenado con números. En el siguiente paso, aprenderemos cómo convertir esta lista en una matriz primitiva de enteros (int array).

Convierte una lista a un array utilizando la API Stream

En este paso, aprenderemos nuestro primer método para convertir una lista de enteros (Integer List) en una matriz de enteros (int array) utilizando la API de Streams de Java. La API de Streams proporciona una forma moderna y eficiente de procesar colecciones de datos.

Comprendiendo los Streams de Java

Un Stream en Java es como una tubería que puede procesar datos paso a paso:

  • Toma datos de una fuente (nuestra lista).
  • Procesa los datos (convierte Integer a int).
  • Recopila los resultados (en una matriz).

Agregar el código de conversión

  1. Asegúrate de estar en el directorio del proyecto:
cd /home/labex/project
  1. Abre src/main/java/IntegerListToIntArray.java y agrega este código después del código de creación de la lista:
// Method 1: Using Stream API
System.out.println("Converting using Stream API:");

// Convert Integer List to int array using Stream
int[] intArrayUsingStream = integerList.stream()    // Create a stream from the list
                                     .mapToInt(Integer::intValue)  // Convert Integer to int
                                     .toArray();    // Collect results into an array

// Print the converted array
System.out.println("Converted int Array:");
for (int value : intArrayUsingStream) {
    System.out.print(value + " ");
}
System.out.println("\n");
  1. Compila y ejecuta el programa:
mvn compile
mvn exec:java

Deberías ver una salida 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

Comprendiendo el código

Analicemos cómo funciona la conversión:

  1. integerList.stream() - Crea un stream a partir de nuestra lista.
  2. .mapToInt(Integer::intValue) - Convierte cada Integer en un int.
  3. .toArray() - Recopila todos los valores int en una matriz.

Integer::intValue se llama referencia a método. Es una forma abreviada de escribir number -> number.intValue().

Convierte una lista a un array utilizando ArrayUtils

En este paso, aprenderemos un segundo método para convertir nuestra lista utilizando la clase ArrayUtils de la librería Apache Commons Lang. Este método es más sencillo y puede ser más fácil de entender para los principiantes.

Comprendiendo ArrayUtils

La clase ArrayUtils proporciona muchos métodos útiles para trabajar con matrices. El método toPrimitive() en particular nos ayuda a convertir de tipos envolventes (como Integer) a tipos primitivos (como int).

Agregar el código de conversión de ArrayUtils

  1. Agrega este código a tu archivo IntegerListToIntArray.java después del código de la API de Streams:
// Method 2: Using ArrayUtils
System.out.println("Converting using ArrayUtils:");

// First convert List<Integer> to Integer[]
Integer[] intermediateArray = integerList.toArray(new Integer[0]);

// Then convert Integer[] to int[]
int[] intArrayUsingArrayUtils = ArrayUtils.toPrimitive(intermediateArray);

// Print the converted array
System.out.println("Converted int Array:");
for (int value : intArrayUsingArrayUtils) {
    System.out.print(value + " ");
}
System.out.println("\n");
  1. Compila y ejecuta el programa:
mvn compile
mvn exec:java

Ahora deberías ver ambos métodos de conversión en la salida:

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

Comprendiendo el código

El método de ArrayUtils funciona en dos pasos:

  1. integerList.toArray(new Integer[0]) - Convierte la lista en una matriz de objetos Integer.
  2. ArrayUtils.toPrimitive() - Convierte la matriz de Integer en una matriz de int.

Este método es más sencillo, pero requiere la librería Apache Commons Lang.

Resumen

En este laboratorio (lab), aprendiste dos formas diferentes de convertir una lista de Integer a una matriz de int en Java:

  1. Utilizando la API de Streams de Java:
int[] array = integerList.stream().mapToInt(Integer::intValue).toArray();
  • Enfoque moderno y funcional.
  • Integrado en Java.
  • Bueno para procesar datos paso a paso.
  1. Utilizando ArrayUtils de Apache Commons Lang:
int[] array = ArrayUtils.toPrimitive(integerList.toArray(new Integer[0]));
  • Enfoque más sencillo.
  • Requiere una librería externa.
  • Fácil de entender y usar.

Ambos métodos logran el mismo resultado, y puedes elegir el que mejor se adapte a tus necesidades:

  • Utiliza la API de Streams cuando desees un enfoque moderno y funcional.
  • Utiliza ArrayUtils cuando desees un código más sencillo y legible.

Ahora tienes el conocimiento para convertir entre listas de Integer y matrices de int en tus aplicaciones Java.