Tengo una matriz que me gustaría convertir en una Listpara modificar el contenido de la matriz.
Desbordamiento de la pila tiene un montón de preguntas / respuestas que la dirección Arrays.asList()y la forma en que sólo proporciona una vista de lista de la matriz subyacente, y cómo tratar de manipular la lista resultante generalmente lanzar una UnsupportedOperationExceptioncomo los métodos utilizados para manipular la lista (por ejemplo add(), remove(), etc.) son no implementado por la implementación de List proporcionada 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í.

Y si está utilizando las API de colección de Google
fuente
new ArrayList<>(Arrays.asList(...))los dos : el javadoc para el método implica que quedará obsoleto porque no es lo suficientemente útil.Este código simple que usa la API 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));fuente
Si está usando Eclipse Collections (anteriormente GS Collections ), puede usar
FastList.newListWith(...)oFastList.wrapCopy(...).Ambos métodos toman varargs, por lo que puede crear la matriz en línea o pasar 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, lleva un 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 comprometido con las colecciones de Eclipse.
fuente
myNewArrayList = new ArrayList<>(Arrays.asList(myArray));fuente
myNewArrayList = new ArrayList(...), es decir, el tipo sin formato? Hay una diferencia entre "usar el operador de diamante para permitir que el compilador desarrolle un argumento de tipo" y "usar un tipo sin formato".Agregando otra opción usando Streams API:
fuente