Convertir Set a List y List a Set
En este artículo, aunque breve, es necesario para conocer las diferentes maneras que tenemos para convertir Set a List y List a Set. En los siguientes ejemplos, veremos como podemos realizarlo a través de Java, Guava y la librería Apache Commons Collection.
Google Guava, es un conjunto de liberías open soruce para Java, desarrolladas por Google. Apache Commons Collections, que fue una mejora introducida desde la versión 1.2 de Java, añade mejoras para las estructuras de datos.
Convertir Set a List
En este ejemplo vamos a partir de una clase Java la cual tiene un método Main para que se pueda ejecutar, y un método privado donde reside la lógica de las transformaciones de Set a List. En los diferentes métodos se cambiará únicamente este método privado.
Con Java
import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class ConvertToListFromSet{ public static void main( String[] args ){ convertToList(); } private void convertToList() { System.out.println("Values ....."); Set<String> fromSet = Sets.newHashSet("Hi", "Hello", "Bye", "See you"); fromSet.forEach(s->System.out.println(s)); List<String> toList = new ArrayList<>(sourceSet); toList.forEach(s->System.out.println(s)); } }
Salida:
Values ..... Bye Hello Hi See you Bye Hello Hi See you
Con Guava.
Para ver el siguiente ejemplo modificaremos únicamente el método privado.
private void convertToList() { System.out.println("Values ....."); Set<String> fromSet = Sets.newHashSet("Hi", "Hello", "Bye", "See you"); fromSet.forEach(s->System.out.println(s)); List<String> toList = Lists.newArrayList(sourceSet); toList.forEach(s->System.out.println(s)); }
Con Apache Commons Collections
Al igual que en el caso anterior, realizaremos la transformación únicamente en el método privado.
private void convertToList() { System.out.println("Values ....."); Set<String> fromSet = Sets.newHashSet("Hi", "Hello", "Bye", "See you"); fromSet.forEach(s->System.out.println(s)); List<Integer> toList = new ArrayList<>(4); CollectionUtils.addAll(targetList, sourceSet); toList.forEach(s->System.out.println(s)); }
Convertir List a Set
Al igual que en el caso anterior, vamos a partir de una clase Java con un método main y un método privado en donde reside la lógica de los cambios de List a Set. Esta clase mostrará por pantalla los valores tanto del Set y de List.
Con Java
La transformación de List a Set haciendo uso únicamente de Java quedaría de la siguiente forma:
import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class ConvertToListFromSet{ public static void main( String[] args ){ convertToList(); } private void convertToList() { System.out.println("Values ....."); List<String> fromList = Arrays.asList("Hi", "Hello", "Bye", "See you"); fromList.forEach(s->System.out.println(s)); Set<String> toSet = new HashSet<>(sourceList); toSet.forEach(s->System.out.println(s)); } }
Salida:
Values ..... Hi Hello Bye See you Bye Hello Hi See you
Como nota, hay que tener en cuenta que el set no mantiene el orden.
Con Guava:
Para este ejemplo cambiaremos únicamente el método privado que hemos creado:
private void convertToList() { System.out.println("Values ....."); List<String> fromList = Lists.newArrayList("Hi", "Hello", "Bye", "See you"); fromList.forEach(s->System.out.println(s)); Set<String> toSet = Sets.newHashSet(sourceList); toSet.forEach(s->System.out.println(s)); }
Con Apache Commons Collections
Al igual que en el caso anterior únicamente modificamos el método privado:
private void convertToList() { System.out.println("Values ....."); List<String> fromList = Lists.newArrayList("Hi", "Hello", "Bye", "See you"); fromList.forEach(s->System.out.println(s)); Set<String> toSet = new HashSet<>(4);; CollectionUtils.addAll(toSet, fromList); toSet.forEach(s->System.out.println(s)); }
Conclusión
En esta breve entrada hemos visto 3 maneras diferentes de como podemos transformar entre Set y List, y List a Set. En esta entrada hemos escrito unos ejemplos, que aunque de conceptos muy básicos, son bastante necesarios cuando se trabaja con Java.