java - que - qué es la clase swing
La biblioteca de guayaba para java; ¿Cuáles son sus características más útiles u ocultas? (8)
Absolutamente muy súper útil. Es casi invariablemente la primera biblioteca agregada a un nuevo proyecto.
- Estamos muy encariñados con Iterators / Iterables y la interfaz de Función.
- La familia de interfaces de Servicio son grandes abstracciones
- Estamos tan comprometidos que hemos comenzado a usar las clases de ImmutableXXX con nuestros tipos de API para comunicar que no se puede cambiar.
- Los mapas informáticos (de MapMaker) son maravillosos en ciertas situaciones.
En general, la biblioteca es de muy alta calidad. La API está bien pensada, la implementación sólida. Muy recomendable.
He realizado un análisis rápido de 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 el proyecto (s) en el que trabajo. Sin embargo, también tengo la reticencia de incluir bibliotecas de cualquier forma si no son de gran beneficio y aprender las funciones pierde un tiempo valioso.
¿Ha incluido la biblioteca de Guava en su proyecto y ha resultado útil de forma 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?
Aquí hay un video de YouTube de Google (conferencista: Kevin Bourrillion, ingeniero principal de las bibliotecas Java centrales 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.
En serio, todo en Guava es útil. Lo he estado utilizando durante bastante tiempo, y todavía estoy descubriendo algo nuevo que puedo hacer con él que requiere menos código que hacerlo a mano.
Algunas cosas que otros realmente no han mencionado que me encantan:
-
Multimap
s son geniales. Cada vez que use algo comoMap<Foo, Collection<Bar>>
, use un multimap en su lugar y ahórrese una tonelada de tediosa comprobación de una colección existente asignada a una clave y crearla y agregarla si no está allí. -
Ordering
es excelente para crearComparator
que se comporten como usted desee. -
Maps.uniqueIndex
yMultimaps.index
: estos métodos toman unIterable
y unaFunction
y crean unImmutableMap
oImmutableListMultimap
que indexa los valores enIterable
por el resultado de aplicar la función a cada uno. Entonces, con una función que recupera el ID de un artículo, puede indexar una lista de elementos por su ID en una línea. - El material funcional que proporciona ...
filter
,transform
, etc. A pesar de la verbosidad de usar clases paraFunction
s yPredicate
s, he encontrado esto útil. Doy un ejemplo de una forma de hacer que esto se lea muy bien here . -
ComparisonChain
es una clase pequeña, que se pasa por alto fácilmente, que es útil cuando se desea escribir un método de comparación que compare varios valores en sucesión y que debe regresar cuando se encuentra la primera diferencia. Elimina todo el tedio de eso, por lo que es solo unas pocas líneas de llamadas encadenadas. -
Objects.equal(Object,Object)
- null safe es igual a. -
Objects.hashCode(Object...)
- forma fácil de obtener un código hash basado en múltiples campos de su 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 a un método (tendría que asignarlo a una variable antes de hacer esto la forma normal). -
CharMatcher
se mencionaron losCharMatcher
, pero son muy poderosos. -
Throwables
te permite hacer algunas cosas buenas con throwables, como Throwables.propagate, que vuelve a lanzar un throwable si se trata de unaRuntimeException
o unError
y lo envuelve en unaRuntimeException
y arroja eso de lo contrario.
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 u otra situación. Gran parte de esto es útil muy a menudo. A medida que lo use, descubrirá más usos. No usarlo se sentirá un poco como tener una mano atada a la espalda.
Google Guava es una biblioteca de utilidades, así que dudo que haya una clase asesina dentro. Todo sobre la utilidad es que casi lo 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 recolección de Google Guava es maravillosa y debería estar en el SDK de Java.
He escrito tres artículos sobre clases en Google Guava:
- Usando
CheckedFuture
: http://blog.firdau.si/2010/07/07/guava-using-checkedfuture/ - Usando
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.
He estado usando Guava durante un par de años, dentro de Google, y es maravilloso.
Las partes que me gustan especialmente son:
-
Charsets.*
- tan simple, tan útil - Colecciones
- Manejo de IO (lea un recurso completamente en una sola línea, etc.)
-
Splitter
/Joiner
-
Preconditions
Inicialmente lo usé para colecciones de manos cortas. Por ejemplo, en lugar de:
Map<String, Map<Long, List<String>>> map = new HashMap<String, Map<Long, List<String>>>();
Puedes hacerlo:
Map<String, Map<Long, List<String>>> map = Maps.newHashMap();
También es fácil llenar mapas:
ImmutableMap<String,String> map = ImmutableMap.of("key1", "value1", "key2", "value2");
Ahora, he descubierto algunas otras utilidades útiles presentes en Guava. Por ejemplo, la clase CharMatcher te permite CharMatcher secuencias de personajes. Tu puedes hacer:
CharMatcher.inRange(''a'',''z'').or(inRange(''A'',''Z''));
o
String phoneNumber = CharMatcher.DIGIT.retainFrom("my phone number is 123456789");
MapMaker ahora ofrece cachés de LRU delimitados, es una maquinaria sustancial escondida detrás de una pequeña API. Esto tiene el potencial para una gran utilidad, y todavía estoy por todo el código.
El método ( source ) precalculado () de CharMatcher es una bonita "función oculta" con la que tropecé el otro día.
Es solo una optimización, que crea una tabla de búsqueda (usando una matriz de bits), y luego simplemente busca los caracteres para ver si "coinciden".
Es el tipo de optimización oculta que puede aprovechar cuando utiliza 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 precalculado (), como:
CharMatcher complexMatcher = CharMatcher.anyOf("cat")
.or(CharMatcher.DIGIT)
.or(CharMatcher.WHITESPACE)
.precomputed();