He examinado rápidamente la API de Guava y los nuevos tipos de colección que proporciona ( Multimap
y, BiMap
por ejemplo, parecen útiles) y estoy pensando en incluir la biblioteca en los proyectos en los que trabajo.
Sin embargo, también tengo reticencias a incluir bibliotecas de manera voluntaria si no son de gran beneficio y aprender las características desperdicia un tiempo valioso.
¿Ha incluido la biblioteca Guava en su proyecto y ha resultado útil de alguna manera inesperada? ¿Lo usarías siempre en el futuro? ¿Cuál ha sido su principal beneficio / ahorro de tiempo? ¿Cuáles son sus características ocultas?
Respuestas:
En serio, todo en Guava es útil. Lo he estado usando durante bastante tiempo y todavía siempre descubro algo nuevo que puedo hacer con él que requiere menos código que hacerlo a mano.
Algunas cosas que otros no han mencionado realmente que amo:
Multimap
s son simplemente geniales. Cada vez que use algo comoMap<Foo, Collection<Bar>>
, use un multimapa en su lugar y ahórrese un montón de tediosas comprobaciones para una colección existente asignada a una clave y cree y agregue si no está allí.Ordering
es ideal para construirComparator
s que se comporten como quieres.Maps.uniqueIndex
yMultimaps.index
: estos métodos toman unaIterable
y aFunction
y construyen unaImmutableMap
oImmutableListMultimap
que indexa los valores enIterable
el resultado de aplicar la función a cada uno. Entonces, con una función que recupera la ID de un artículo, puede indexar una lista de artículos por su ID en una línea.filter
,transform
etc. A pesar de la verbosidad de uso de clases paraFunction
s yPredicate
s, he encontrado esto útil. Doy un ejemplo de una manera de hacer que esto se lea bien aquí .ComparisonChain
es una clase pequeña, fácil de pasar por alto, que es útil cuando desea escribir un método de comparación que compare varios valores en sucesión y debe regresar cuando se encuentra la primera diferencia. Elimina todo el tedio de eso, convirtiéndolo en solo unas pocas líneas de llamadas a métodos encadenados.Objects.equal(Object,Object)
- nulo seguro igual.Objects.hashCode(Object...)
- forma fácil de obtener un código hash basado en múltiples campos de tu clase.Objects.firstNonNull(Object,Object)
- reduce el código para obtener un valor predeterminado si el primer valor es nulo, especialmente si el primer valor es el resultado de una llamada al método (tendría que asignarlo a una variable antes de hacerlo de la manera normal).CharMatcher
Ya se mencionaron, pero son muy poderosos.Throwables
le permite hacer algunas cosas buenas con losThrowables.propagate
objetos arrojables , como volver a lanzar un objeto arrojadizo si es unRuntimeException
o unError
y lo envuelve en unRuntimeException
y lo arroja de otra manera.Ciertamente podría seguir, pero tengo que ir a trabajar. =) De todos modos, a pesar de haber enumerado algunas cosas que me gustan aquí, el hecho es que todo en Guava es útil en una situación u otra. Gran parte de esto es útil con mucha frecuencia. A medida que lo use, descubrirá más usos. No usarlo se sentirá un poco como tener una mano atada a la espalda.
fuente
ComparisionChain
.He estado usando efectivamente Guava durante un par de años, dentro de Google, y es maravilloso.
Las partes que me gustan especialmente son:
Charsets.*
- Tan simple, tan útilSplitter
/ /Joiner
Preconditions
fuente
Inicialmente lo usé para colecciones shorthands. Por ejemplo, en lugar de:
Puedes hacerlo:
También es fácil poblar mapas:
Ahora, he descubierto algunas otras utilidades útiles presentes en Guava. Por ejemplo, la clase CharMatcher le permite unir secuencias de caracteres. Tu puedes hacer:
o
fuente
El método precomputado () de CharMatcher ( fuente ) es una buena "característica oculta" que encontré el otro día.
Realmente es solo una optimización, que crea una tabla de búsqueda (usando una matriz de bits), y luego simplemente busca caracteres para ver si "coinciden".
Es el tipo de optimización oculta que puede aprovechar cuando usa una biblioteca, que tal vez no haya pensado en su propio código.
Por supuesto, si crea un CharMatcher complejo, que planea usar muchas veces, debe recordar llamar al método precomputado (), como:
fuente
Aquí hay un video de YouTube de Google (ponente: Kevin Bourrillion, ingeniero principal de las principales bibliotecas Java de Google) que muestra la belleza de Google Collections. Una cosa que hizo Google, que creo que es brillante, es garantizar la inmutabilidad en las colecciones.
fuente
Google Guava es una biblioteca de utilidades, por lo que dudo que haya una clase asesina en su interior. Todo acerca de la utilidad es que casi la usas en todos los proyectos que tienes. No recuerdo ningún proyecto que haya hecho que no use la colección Java. Y la verdad es que la utilidad de recopilación de Google Guava es maravillosa y debe estar en el SDK de Java.
He escrito tres artículos sobre clases en Google Guava:
CheckedFuture
: http://blog.firdau.si/2010/07/07/guava-using-checkedfuture/ListenableFuture
: http://blog.firdau.si/2010/07/05/guava-using-listenablefuture/ComputingMap
en Google Collection (ahora Guava) http://blog.firdau.si/2009/11/13/computing-map-on-google-collections/Y esto no es todo, hay muchas otras cosas que puedes hacer con Guava.
fuente
Absolutamente muy super útil. Es casi invariablemente la primera biblioteca agregada a un nuevo proyecto.
En general, la biblioteca es de muy alta calidad. La API está bien pensada, la implementación es sólida. Muy recomendable.
fuente
MapMaker ahora ofrece memorias caché LRU limitadas, que es una maquinaria sustancial oculta detrás de una pequeña API. Esto tiene el potencial de una gran utilidad, y todavía estoy en todo el código.
fuente