titledborder poner definicion borde java arrays list mutable

java - poner - Crear una lista mutable de la matriz?



table swing java (5)

Este código simple que utiliza la API de Stream incluida en Java 8 crea una lista mutable (o vista) que contiene los elementos de su matriz:

Foo[] array = ...; List<Foo> list = Stream.of(array).collect(Collectors.toCollection(ArrayList::new));

O, igualmente válido:

List<Foo> list = Arrays.stream(array).collect(Collectors.toCollection(ArrayList::new));

Tengo una matriz que me gustaría convertir en una List para modificar el contenido de la matriz.

Stack Overflow tiene muchas preguntas / respuestas que abordan Arrays.asList() y cómo solo proporciona una vista de Lista de la matriz subyacente, y cómo intentar manipular la Lista resultante generalmente generará una UnsupportedOperationException como métodos utilizados para manipular la lista (por ejemplo, add() , remove() , etc.) no están implementados por la implementación de Lista provista por Arrays.asList() .

Pero no puedo encontrar un ejemplo de cómo convertir una matriz en una Lista mutable. Supongo que puedo recorrer la matriz y put() cada valor en una nueva lista, pero me pregunto si existe una interfaz para hacer esto por mí.


Si está utilizando Eclipse Collections (anteriormente GS Collections ), puede usar FastList.newListWith(...) o FastList.wrapCopy(...) .

Ambos métodos toman varargs, por lo que puede crear la matriz en línea o pasar en una matriz existente.

MutableList<Integer> list1 = FastList.newListWith(1, 2, 3, 4); Integer[] array2 = {1, 2, 3, 4}; MutableList<Integer> list2 = FastList.newListWith(array2);

La diferencia entre los dos métodos es si la matriz se copia o no. newListWith() no copia la matriz y, por lo tanto, toma tiempo constante. Debe evitar usarlo si sabe que la matriz podría estar mutada en otro lugar.

Integer[] array2 = {1, 2, 3, 4}; MutableList<Integer> list2 = FastList.newListWith(array2); array2[1] = 5; Assert.assertEquals(FastList.newListWith(1, 5, 3, 4), list2); Integer[] array3 = {1, 2, 3, 4}; MutableList<Integer> list3 = FastList.wrapCopy(array3); array3[1] = 5; Assert.assertEquals(FastList.newListWith(1, 2, 3, 4), list3);

Nota: Soy un comendador de Eclipse Collections.


Una forma simple:

Foo[] array = ...; List<Foo> list = new ArrayList<Foo>(Arrays.asList(array));

Eso creará una lista mutable, pero será una copia de la matriz original. Cambiar la lista no cambiará la matriz. Puede volver a copiarlo más tarde, por supuesto, usando toArray .

Si desea crear una vista mutable en una matriz, creo que tendrá que implementarla usted mismo.


Y si está utilizando API de colección de Google

Lists.newArrayList(myArray)


myNewArrayList = new ArrayList<>(Arrays.asList(myArray));