domingo, 22 de mayo de 2016

La librería de utilidad de Google: Guava, conceptos básicos

Hace poco me hablaron de esta librería de utilidades de Google, y en este post hablaremos básicamente de las características que a priori me han parecido más interesantes.

Empecemos por la funcionalidad a través de la cual llege a Guava: Functions. Esta clase nos permitirá encapsular la lógica de transformación de un objeto a otro.

Function convertidorPrecioConInva = new Function() {
  @Override
  public Double apply(Producto producto) {
   return producto.getPrecio() * 1.21;
  }
}
Collection preciosConIva = Collections2.transform(productos, convertidorPrecioConInva);

Predicates: Nos permite generar filtros lógicos a aplicar a una colección de objetos para de esta forma obtener únicamente los que pasen dicho filtro

Predicate esPar = new Predicate() {
   @Override public boolean apply(Integer number) {
       return (number % 2) == 0;
   }               
};
List numeros = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
Iterable numerosPares = Iterables.filter(numeros, esPar);

Inicializador de colecciones (Factory Methods): Guava contiene un conjunto de clases de colecciones que nos permite crear colecciones genéricas sin tener que especificar los objetos de las que están compuestas

List frutas = Lists.newArrayList("fresa", "melon","sandia");
final Map> miMapa = Maps.newHashMap();

Multimaps: Es un mapa que te permite obtener más de un objeto asociado a la misma clave, como si a la clave estuviese asociado una colección de objetos.

Multimap multiMap = ArrayListMultimap.create();
multiMap.put("coches", "mercedes");
multiMap.put("coches", "citroen");
multiMap.put("coches", "volvo");
LOGGER.debug(multimap.size()); //3
   
Collection coches = multimap.get("coches");
System.out.println(fruits); // [Bannana, Apple, Pear]
   
// Borrar un unico valor
multimap.remove("coches","mercedes");
LOGGER.debug(myMultimap.get("coches")); // [citroen, volvo]
// Borrar todos los valores
myMultimap.removeAll("coches");

Bimaps: Es un mapa que funciona en doble sentido, puedes obtener un valor en función de una clave y una clave en función de un valor.

BiMap vehiculosYRuedas = HashBiMap.create();
vehiculosYRuedas.put('coche','cuatro');
vehiculosYRuedas.put('moto','dos');
LOGGER.debug(vehiculosYRuedas.get('coche')); // cuatro

BiMap ruedasYVehiculos = vehiculosYRuedas.inverse();
LOGGER.debug(ruedasYVehiculos.get('dos')); // moto

HashCode y comparators: Contiene utilidades que facilitan la tarea de realizar un hashcode y comparadores.

public int hashCode() {
        return Objects.hashCode(atributoClase1, atributoClase2);
}

public int compareTo(final Object o) {
  return ComparisonChain.start().compare(atributoClase1, o.atributoClase1).compare(atributoClase2, o.atributoClase2
}

No hay comentarios:

Publicar un comentario