Libro de cocina de las colecciones de guayaba

1. Introducción

Este artículo de libro de cocina está organizado en recetas y fragmentos de código pequeños y enfocados para usar colecciones de estilo Guava.

El formato es el de una lista cada vez mayor de ejemplos de código sin necesidad de explicación adicional; está destinado a mantener los usos comunes de la API de fácil acceso durante el desarrollo.

2. Las recetas

rebajar una lista a una lista

- nota : esta es una solución para las colecciones generadas no covariantes en Java

class CastFunction implements Function { @Override public final T apply(final F from) { return (T) from; } } List originalList = Lists.newArrayList(); List theList = Lists.transform(originalList, new CastFunction());

alternativa más simple sin guayaba - que involucra 2 operaciones de lanzamiento

List originalList = Lists.newArrayList(); List theList = (List) (List) originalList;

agregando un iterable a una colección

Iterable iter = Lists.newArrayList(); Collection collector = Lists.newArrayList(); Iterables.addAll(collector, iter);

comprobar si la colección contiene elementos de acuerdo con una regla de coincidencia personalizada

Iterable theCollection = Lists.newArrayList("a", "bc", "def"); boolean contains = Iterables.any(theCollection, new Predicate() { @Override public boolean apply(final String input) { return input.length() == 1; } }); assertTrue(contains);

solución alternativa mediante búsqueda

Iterable theCollection = Sets.newHashSet("a", "bc", "def"); boolean contains = Iterables.find(theCollection, new Predicate() { @Override public boolean apply(final String input) { return input.length() == 1; } }) != null; assertTrue(contains);

solución alternativa solo aplicable a Sets

Set theCollection = Sets.newHashSet("a", "bc", "def"); boolean contains = !Sets.filter(theCollection, new Predicate() { @Override public boolean apply(final String input) { return input.length() == 1; } }).isEmpty(); assertTrue(contains);

NoSuchElementException en Iterables.find cuando no se encuentra nada

Iterable theCollection = Sets.newHashSet("abcd", "efgh", "ijkl"); Predicate inputOfLengthOne = new Predicate() { @Override public boolean apply(final String input) { return input.length() == 1; } }; String found = Iterables.find(theCollection, inputOfLengthOne);

- esto lanzará la excepción NoSuchElementException :

java.util.NoSuchElementException at com.google.common.collect.AbstractIterator.next(AbstractIterator.java:154) at com.google.common.collect.Iterators.find(Iterators.java:712) at com.google.common.collect.Iterables.find(Iterables.java:643)

- solución : hay un método de búsqueda sobrecargado que toma el valor de retorno predeterminado como argumento y se puede llamar con nulo para el comportamiento deseado:

String found = Iterables.find(theCollection, inputOfLengthOne, null);

eliminar todos los valores nulos de una colección

List values = Lists.newArrayList("a", null, "b", "c"); Iterable withoutNulls = Iterables.filter(values, Predicates.notNull());

crear lista / conjunto / mapa inmutable directamente

ImmutableList immutableList = ImmutableList.of("a", "b", "c"); ImmutableSet immutableSet = ImmutableSet.of("a", "b", "c"); ImmutableMap imuttableMap = ImmutableMap.of("k1", "v1", "k2", "v2", "k3", "v3");

crear una lista / conjunto / mapa inmutable a partir de una colección estándar

List muttableList = Lists.newArrayList(); ImmutableList immutableList = ImmutableList.copyOf(muttableList); Set muttableSet = Sets.newHashSet(); ImmutableSet immutableSet = ImmutableSet.copyOf(muttableSet); Map muttableMap = Maps.newHashMap(); ImmutableMap imuttableMap = ImmutableMap.copyOf(muttableMap);

solución alternativa utilizando constructores

List muttableList = Lists.newArrayList(); ImmutableList immutableList = ImmutableList. builder().addAll(muttableList).build(); Set muttableSet = Sets.newHashSet(); ImmutableSet immutableSet = ImmutableSet. builder().addAll(muttableSet).build(); Map muttableMap = Maps.newHashMap(); ImmutableMap imuttableMap = ImmutableMap. builder().putAll(muttableMap).build();

3. Más libros de cocina de guayaba

Guava es una biblioteca completa y fantásticamente útil; aquí hay algunas API más cubiertas en forma de libro de cocina:

  • Libro de cocina para pedidos de guayaba

  • Libro de cocina funcional de guayaba

Disfrutar.

4. Avanzando

Como mencioné al principio, estoy experimentando con este formato diferente, el libro de cocina , para tratar de reunir las tareas comunes simples de usar las colecciones de guayaba en un solo lugar. El enfoque de este formato es la simplicidad y la velocidad, por lo que la mayoría de las recetas no tienen una explicación adicional que no sea el ejemplo de código en sí .

Finalmente, lo veo como un documento dinámico, seguiré agregando recetas y ejemplos a medida que los encuentre. Siéntase libre de proporcionar más en los comentarios y buscaré incorporarlos en el libro de cocina.

La implementación de todos estos ejemplos y fragmentos de código se puede encontrar en GitHub : este es un proyecto basado en Maven, por lo que debería ser fácil de importar y ejecutar como está.