¿Cómo convertir int[] en List<Integer> en Java?

Resuelto Pablo Fernandez asked hace 15 años • 21 respuestas

¿ Cómo convierto int[]a List<Integer>Java?

Por supuesto, me interesa cualquier otra respuesta que no sea hacerlo en bucle, elemento por elemento. Pero si no hay otra respuesta, elegiré esa como la mejor para mostrar el hecho de que esta funcionalidad no es parte de Java.

Pablo Fernandez avatar Jul 02 '09 18:07 Pablo Fernandez
Aceptado

Corrientes

  1. En Java 8+ puedes hacer una transmisión de tu intmatriz. Llame a Arrays.streamo IntStream.of.
  2. Llame IntStream#boxedpara usar la conversión de boxeo de intprimitivo a Integerobjetos.
  3. Recopile en una lista usando Stream.collect( Collectors.toList() ). O más simplemente en Java 16+, llame a Stream#toList().

Ejemplo:

int[] ints = {1,2,3};
List<Integer> list = Arrays.stream(ints).boxed().collect(Collectors.toList());

En Java 16 y posteriores:

List<Integer> list = Arrays.stream(ints).boxed().toList();
mikeyreilly avatar May 08 '2014 16:05 mikeyreilly

No hay ningún atajo para convertir de int[]a a List<Integer>, ya que Arrays.asListno se ocupa del boxeo y simplemente creará un archivo List<int[]>que no es lo que desea. Tienes que hacer un método de utilidad.

int[] ints = {1, 2, 3};
List<Integer> intList = new ArrayList<Integer>(ints.length);
for (int i : ints)
{
    intList.add(i);
}
willcodejavaforfood avatar Jul 02 '2009 11:07 willcodejavaforfood

También de bibliotecas de guayaba ... com.google.common.primitives.Ints:

List<Integer> Ints.asList(int...)
louisgab avatar Jun 08 '2010 19:06 louisgab

Arrays.asList no funcionará como esperan algunas de las otras respuestas.

Este código no creará una lista de 10 números enteros. Imprimirá 1 , no 10 :

int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
List lst = Arrays.asList(arr);
System.out.println(lst.size());

Esto creará una lista de números enteros:

List<Integer> lst = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

Si ya tiene la matriz de entradas, no existe una forma rápida de convertir, es mejor que utilice el bucle.

Por otro lado, si su matriz tiene objetos, no primitivos, Arrays.asList funcionará:

String str[] = { "Homer", "Marge", "Bart", "Lisa", "Maggie" };
List<String> lst = Arrays.asList(str);
Leonel avatar Jul 02 '2009 12:07 Leonel

Agregaré otra respuesta con un método diferente; no hay bucle sino una clase anónima que utilizará las funciones de autoboxing:

public List<Integer> asList(final int[] is)
{
    return new AbstractList<Integer>() {
            public Integer get(int i) { return is[i]; }
            public int size() { return is.length; }
    };
}
Christoffer avatar Jul 02 '2009 12:07 Christoffer