3 formas de inicializar colecciones Java a la hora de declararlas

20/08/2018Artículo original

Foto por Aaron Burden en Unsplash

En muchos lenguajes, al definir una colección como un array o una lista podemos asignarle una sucesión de valores de forma que los contenga como elementos. En Java, podemos hacer esto con arrays básicos:

int[] miArray = new int[] {3, 1, 4};

Sin embargo, a la hora de inicializar una colección de objetos de una clase, la misma sintaxis no es aplicable. En su lugar, habitualmente debemos recurrir a los métodos que añaden elementos, como add en el caso de las clases con interfaz List:

List<Integer> miLista = new ArrayList<Integer>();miLista.add(3);miLista.add(1);miLista.add(4);

En este post te enseño tres vías para conseguir introducir los elementos en la colección en menos código y con mayor legibilidad.

Métodos de utilidades

Una de las estrategias posibles para hacer más compacto este código es usar el método asList de la clase Arrays de herramientas para manipulación de vectores. Se trata de una solución muy simple que reduciría el código a la siguiente línea:

List<Integer> miLista = Arrays.asList(3, 1, 4);

Un detalle a tener en cuenta es que este método construye una lista de tamaño fijo, por lo que no se podrá ampliar. Para contar con esa posibilidad debemos realizar la conversión a una clase que implemente List:

List<Integer> miLista = new ArrayList<Integer>(Arrays.asList(3, 1, 4));

Inicialización de doble llave

Otra posibilidad es aprovechar un patrón de sintaxis conocida como la inicialización de doble llave. Esta consiste en abrir una llave que crea una subclase anónima, y una segunda llave que comienza un inicializador de instancia. Dentro de este inicializador podemos recurrir a los métodos del objeto que estamos definiendo de la siguiente forma:

List<Integer> miLista = new ArrayList<Integer>() {{ add(3); add(1); add(4); }};

Esta sintaxis es sorprendente y muy versátil, ya que no sólo se reduce a la funcionalidad de añadir elementos sino que se puede utilizar para realizar otras tareas de inicialización, como la definición de componentes de una interfaz de usuario. A pesar de esto, en muchos casos no es recomendada ya que la creación de una subclase anónima puede conllevar cierta sobrecarga.

  Publicado Ruby 2.7.0-preview1

Métodos factoría de Java 9

Una tercera opción que se ha introducido en Java 9 es el uso de métodos factoría ya incluidos en el lenguaje. Las interfaces List, Set y Map proporcionan un método of que nos permite hacer justo lo que necesitamos: especificar varios elementos a la hora de declarar una colección. El siguiente es un ejemplo de su uso:

List<Integer> miLista = List.of(3, 1, 4);

Esta opción no es totalmente equivalente a las anteriores ya que el método of construye colecciones inmutables. Para permitir modificar y añadir elementos, tendríamos que recurrir al constructor de la colección que deseemos:

List<Integer> miLista = new ArrayList<Integer>(List.of(3, 1, 4));

Espero que estos trucos te sean útiles para manejar pequeñas colecciones más fácilmente en Java.

  7.000 programadores responden: Java, Python y JavaScript son los lenguajes favoritos, y Go se perfila como el más prometedor

Fuentes y más información:

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad