En algunas ocasiones echamos en falta que el framework de colecciones de Java sea más amplio y contenga un conjunto de clases más flexible. Este problema le podemos solventar apoyandonos en Google Guava un conjunto de librerías de de Google que nos aportan mucha funcionalidad extra. Entre estas funcionalidades destacan nuevos tipos de colecciones, vamos a hacer unos ejemplos.
El concepto de MultiSet (Bolsa)
Java soporta el concepto de Set que es un grupo de elementos no repetidos . Guava soporta el concepto de MultiSet que es un conjunto de elementos que esta compuesto de elementos repetidos de los cuales podemos obtener un conjunto clásico sin repeticiones
Vamos a ver un ejemplo sencillo en código:
package com.arquitecturajava; import java.util.Set; import com.google.common.collect.HashMultiset; import com.google.common.collect.Multiset; public class Principal { public static void main(String[] args) { final Multiset<String> conjuntoCadenas = HashMultiset.create(); conjuntoCadenas.add("hola"); conjuntoCadenas.add("hola"); conjuntoCadenas.add("hola"); conjuntoCadenas.add("que"); conjuntoCadenas.add("que"); conjuntoCadenas.add("tal"); System.out.println("Total:" + conjuntoCadenas.size()); System.out.println("Total holas:" + conjuntoCadenas.count("hola")); System.out.println("Total que:" + conjuntoCadenas.count("que")); System.out.println("Total tal:" + conjuntoCadenas.count("tal")); final Set<String> nuevo = conjuntoCadenas.elementSet(); System.out.println("Nuevo Conjunto :" + nuevo.size()); for (String elemento : nuevo) { System.out.println(elemento); } } }
El resultado por pantalla será el siguiente:
Aunque nos parezca un poco extraña la colección se encuentra a caballo entre los List y los Sets y su funcionalidad se parece mucho al concepto abstracto de “bolsa” en el cual no hay un orden predifinido , se admiten elementos repetidos y necesitamos saber cuantos elementos tenemos de cada item.
MultiMaps
El concepto de MultiMap es parecido al de Map pero en este se admiten tener claves repetidas. En este aspecto se parece bastante al MultiSet.
En este caso podemos usar las claves repetidas para almacenar conjuntos de valores como vemos en el código:
package com.arquitecturajava; import java.util.Collection; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; public class Principal2 { public static void main(String[] args) { final Multimap<String, String> mapa = HashMultimap.create(); mapa.put("basico", "POO"); mapa.put("basico", "JDBC"); mapa.put("avanzado", "EJB"); final Collection<String> cursosBasicos = mapa.get("basico"); System.out.println(cursosBasicos.size()); System.out.println(cursosBasicos.contains("POO")); System.out.println(mapa.get("avanzado").size()); } }
Google Guava siempre ha sido un proyecto muy interesante con el que extender algunas de las capacidades de Java más habituales.
Otros artículos relacionados : forEach vs Iterator, Java Lambda Expressions ,Uso de Generics
[…] artículos relacionados: Java Generics , Colecciones y Google Guava , Java Collections List vs […]