El uso de Java 9 Factory Methods nos ayudará a trabajar de una forma más cómoda con la inicialización de colecciones . En la mayoría de los casos cuando tenemos que trabajar con colecciones siempre hacemos operaciones como las siguientes a la hora de inicializarlas.
package com.arquitecturajava;
import java.util.ArrayList;
public class Principal2 {
public static void main(String[] args) {
ArrayList<String> lista= new ArrayList<>();
lista.add("hola");
lista.add("que");
lista.add("tal");
lista.add("estas");
for (String cadena : lista) {
System.out.println(cadena);
}
}
} Este tipo de operaciones es realmente tediosa pero nos permiten construir la lista y recorrerla de forma sencilla , como podemos observar la lista se presenta en la consola correctamente.
Para solventar este problema se puede usar la clase Arrays y su método asList() que nos permite simplificar el código:
package com.arquitecturajava;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Principal {
public static void main(String[] args) {
List<String> lista= new ArrayList<>();
lista= Arrays.asList("hola","que","tal","estas");
for (String cadena : lista) {
System.out.println(cadena);
}
}
} Sin embargo esto solo nos sirve para las listas y existen otros tipos de colecciones que se usan muy habitualmente como son Set y Map .
Java 9 Factory Methods
Para solventar estos problemas a partir existen los Java 9 Factory Methods que a partir de la versión 9 del JDK están disponibles
.Así pues si queremos hacer uso de ellos e inicializar las colecciones de una forma sencilla y rápida podemos hacer lo siguiente:
package com.arquitecturajava;
import java.util.List;
public class Principal3 {
public static void main(String[] args) {
List<String> lista= List.of("hola","que","tal","estas");
for (String cadena : lista) {
System.out.println(cadena);
}
}
} Utilizamos el método of del interface List y automáticamente podremos construir una lista. Del mismo modo podemos aplicar esta solución a los Sets
package com.arquitecturajava;
import java.util.Set;
public class Principal4 {
public static void main(String[] args) {
Set<String> lista= Set.of("hola","que","tal","estas");
for (String cadena : lista) {
System.out.println(cadena);
}
}
} O mejor aún lo podemos aplicar a los Mapas asignando de forma sucesiva claves y valores a estos.
package com.arquitecturajava;
import java.util.Map;
public class Principal5 {
public static void main(String[] args) {
Map<Integer,String> mapa=Map.of(1,"Java",2,"JavaScript",3,"Kotlin");
for (Map.Entry<Integer, String> claveValor : mapa.entrySet()) {
System.out.println(claveValor.getKey()+ " "+claveValor.getValue());
}
}
} De esta manera cuando recorremos el mapa podemos ver las parejas de clave valor que contiene.
Otras opciones
Las capacidades de Java 9 nos ayudan sobre manera pero hay mucha gente que en estos momentos esta en versiones de Java 8 .Recordemos que en Java 8 también disponemos del método Stream.of que nos permite generar los elementos de forma sencilla pero no tan directa como Java 9.
package com.arquitecturajava;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Principal6 {
public static void main(String[] args) {
List<String> lista= Stream.of("hola","que","tal","estas").collect(Collectors.toList());
for (String cadena : lista) {
System.out.println(cadena);
}
}
} Como podemos observar en este caso necesitamos hacer uso de collectors para que todo encaje de forma relativamente sencilla a nivel de código.