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
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 Java 9Java 9 hizo conveniente la creación de las instancias de la lista con un pequeño número de elementos proporcionando
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
If we need a List that can expand or shrink, we can use –
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. GuavaGuava también proporciona varios métodos de utilidad estática pertenecientes a instancias de Lista.,
Apache Commons ColeccionesApache Commons Colecciones |