inicializar lista en Java en una sola línea

en este post, vamos a discutir varios métodos para inicializar lista en Java en una sola línea.

Java es a menudo criticado por su verbosidad.,structing it, storing it in a variable, invoking add() method on it n times, and then maybe wrapping it to make it unmodifiable:

1
2
3
4
5
6
7

List<String> list = new ArrayList<>();
list.,add («C»);
list.add («C++»);
list.add («Java»);
list = Collections.unmodifiableList (list);

En este post, discutiremos varios métodos para inicializar la lista en una sola expresión.

Arrays.asList ()

Arrays.asList() devuelve una lista de tamaño fijo respaldada por la matriz especificada. Dado que un array no puede ser modificado estructuralmente, no es posible agregar elementos a la lista o eliminar elementos de ella., The list will throw an UnsupportedOperationException if any resize operation is performed on it.

1
List<String> fixedLengthList = Arrays.,asList(«C», «C++», «Java»);

If we need a List that can expand or shrink, we can use –

1
List<String> list = new ArrayList<>(Arrays.,asList(«C», «C++», «Java»));

Java Collections

La Clase Collections consiste en varios métodos estáticos que operan en las colecciones y devuelven una nueva colección respaldada por una colección especificada.

Collections colecciones.addAll ()

Collections.addAll() añade todos los elementos especificados a la colección especificada. Los elementos a añadir pueden especificarse individualmente o como una matriz., When elements are specified individually, this method provides a convenient way to add a few elements to an existing collection:

1
2

List<String> list = Collections.EMPTY_LIST;
Collections.,addAll(lista = new ArrayList<String>(), «C», «C++», «Java»);

⮚ Colecciones.unmodifiableList ()

alternativamente, se puede rellenar una colección usando un constructor de copia de otra colección. Uno de estos métodos es Collections.unmodifiableList() devuelve una vista no modificable de la lista especificada. Cualquier intento de modificar la lista devuelta resultará en un UnsupportedOperationException.

Collections colecciones.,singletonList ()

Si queremos una lista que contenga solo un elemento, podemos usar Collections.singletonList() que devuelve una lista inmutable que contiene ese elemento. La lista lanzará un UnsupportedOperationException si se realiza alguna operación de modificación en ella.

1
Lista de<String> lista = Colecciones.,singletonList («Java»);

Double Brace Initialization

otra alternativa es usar»Double Brace Initialization». Esto crea una clase interna anónima con solo un inicializador de instancia en ella. Es mejor evitar esta técnica, ya que cuesta una clase extra en cada uso y también contiene referencias ocultas a la instancia que encierra y a cualquier objeto capturado. Esto puede causar pérdidas de memoria o problemas con la serialización.,v>2

3
4
5
List<String> list = New ArrayList<string>() {{
add(«C»);
add(«C++»);
add(«Java»);
}};

Java 8

la API de flujo de Java 8 se puede usar para construir listas pequeñas obteniendo flujo de métodos de fábrica estáticos y acumulando los elementos de entrada en una nueva lista utilizando colectores., For example,

⮚ Collectors.toList()

Collectors.toList() returns a Collector that accumulates the input elements into a new List.

1
2

List<String> list = Stream.of(«C», «C++», «Java»)
.collect(Collectors.toList());

⮚ Collectors.,toCollection()

The streams collectors make no guarantee on the type of the List returned by toList(). To ensure the returned List is ArrayList, we can use toCollection(Supplier) as shown below:

1
2

List<String> list = Stream.,de(«C», «C++», «Java»)
.coleccionar (coleccionistas.en el caso de los colectores, los colectores se encuentran en la parte superior de la pantalla y en la parte superior de la pantalla.collectingAndThen ()

podríamos adaptar un colector para realizar una transformación de acabado adicional., Por ejemplo, se podría adaptar el toList() colector para siempre producen una inmodificable lista con:

Java 9

Java 9 hizo conveniente la creación de las instancias de la lista con un pequeño número de elementos proporcionando Lists.of() estática métodos de fábrica que crea compacto, inmodificable instancias de ella., For example,

1
List<String> unmodifiableList = List.of(«C», «C++», «Java»);

Java 9 provides 12 overloaded versions of this method –

Note there is a var-args version which can handle any number of elements., Ahora la pregunta obvia es ¿por qué Java 9 ha incluido tantos métodos adicionales cuando solo var-args puede ser suficiente? La razón es que hay una sutil ventaja de rendimiento en tiempo de ejecución. Es probable que la versión var-args funcione más lentamente que las sobrecargas que no usan varargs. Esto se debe a que cada invocación de un método varargs causará una asignación e inicialización de matriz y no olvidará la sobrecarga de GC.

según Javadoc, las instancias de Lista creadas por List.of() tienen las siguientes características:

  1. son estructuralmente inmutables., Los elementos no se pueden agregar, eliminar o reemplazar. Llamar a cualquier método mutador siempre causará que UnsupportedOperationException sea lanzado. Sin embargo, si los elementos contenidos son mutables, esto puede hacer que el contenido de la lista parezca cambiar.
  2. no permiten elementos nulos. Los intentos de crearlos con elementos nulos dan como resultado NullPointerException.
  3. son serializables si todos los elementos son serializables.
  4. El orden de los elementos en la lista es el mismo que el orden de los argumentos proporcionados, o de los elementos en el array proporcionado.,
  5. se basan en valores. Las personas que llaman no deben hacer suposiciones sobre la identidad de las instancias devueltas. Las fábricas son libres de crear nuevas instancias o reutilizar las existentes. Por lo tanto, las operaciones sensibles a la identidad en estas instancias (igualdad de referencia ( = = ), código hash de identidad y sincronización) no son confiables y deben evitarse.,

If we need a List that can expand or shrink, we can use –

1
List<String> list = new ArrayList<>(List.,of («C»,» C++»,» Java»));

tenga en cuenta que, a diferencia de los métodos estáticos en las clases, los métodos estáticos en las interfaces no se heredan, por lo que no será posible invocarlos a través de una clase de implementación, ni a través de una instancia del tipo de interfaz.

Guava

Guava también proporciona varios métodos de utilidad estática pertenecientes a instancias de Lista.,

Inicializar la Lista de uso de la Guayaba en Java

Apache Commons Colecciones

Apache Commons Colecciones ListUtils clase proporciona unmodifiableList() que devuelve un inmodificable lista respaldada por la lista dada. Arroja un NullPointerException si la lista dada es null y un UnsupportedOperationException si se realiza alguna operación de modificación en él.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *