Java 8 Streams – Remueve valores duplicados en una lista


En el ejemplo del día de hoy hablaremos de un problema común, remover datos duplicados de una lista, como sabemos existen muchos algoritmos para hacerlo, en este post hablaremos de dos formas utilizando Streams.

1 Utilizando distinct()

El método distinct nos permitirá remover datos duplicados de una lista.

public static void main(String[] args) {
	List numbers = Arrays.asList(7, 7, 7, 7, 2, 2, 2, 3, 3, 3, 3, 100, 100, 200, 200);
	numbers = numbers.stream().distinct().collect(Collectors.toList());
	System.out.println(numbers);
}

En el código anterior podemos ver que generamos una lista con muchos números duplicados, generamos un stream y hacemos uso de distinct() lo cual removerá datos duplicados y lo devolvemos como lista, con lo anterior tendremos la siguiente salida:

[7, 2, 3, 100, 200]

Como se puede ver, aunque en la lista original tenemos repetidos los números multiples veces, al utilizar distinct() todos los elementos duplicados fueron removidos y tendremos resultados únicos.

2 Utilizando set

Como sabemos existe una estructura de datos en Java llamada Set la cuál solo almacena datos únicos y es muy utilizada para remover datos duplicados, veamos un ejemplo:

public static void main(String[] args) {
	List numbers = Arrays.asList(7, 7, 7, 7, 2, 2, 2, 3, 3, 3, 3, 100, 100, 200, 200);
	Set nums = numbers.stream().collect(Collectors.toSet());
	System.out.println(nums);
}

En el código anterior podemos ver que nuestra entrada es una lista y lo único que hacemos es a través del método collect(..) la transformamos a un Set y con esto aseguramos que la salida será solo datos únicos, veamos la salida:

[2, 3, 100, 7, 200]

Del mismo modo que con el método distinct el resultado es un conjunto de números únicos en la salida, es importante considerar el tipo de colección que queremos utilizar en nuestro problema ya que eso determinará cuál de los dos mecanismos utilizaremos.

Para enterarte sobre futuros posts te recomendamos seguirnos en nuestras redes sociales: https://twitter.com/geeks_mx y https://www.facebook.com/geeksJavaMexico/.

Autor: Alejandro Agapito Bautista

Twitter: @raidentrance

Contacto:raidentrance@gmail.com

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s