J'ai eu une analyse rapide de l' API Guava et des nouveaux types de collections qu'elle fournit ( Multimap
et BiMap
par exemple semblent utiles) et je pense inclure la bibliothèque dans le ou les projets sur lesquels je travaille.
Cependant, j'ai aussi une réticence à inclure des bibliothèques bon gré mal gré si elles ne sont pas d'une grande utilité et l'apprentissage des fonctionnalités fait perdre un temps précieux.
Avez-vous inclus la bibliothèque Guava dans votre projet et s'est-elle avérée utile d'une manière inattendue? L'utiliseriez-vous toujours à l'avenir? Quel a été son principal avantage / gain de temps? Quelles sont ses caractéristiques cachées?
Réponses:
Sérieusement, tout dans Guava est utile. Je l'utilise depuis un bon moment et je découvre toujours quelque chose de nouveau que je peux faire avec qui prend moins de code que de le faire à la main.
Certaines choses que d'autres n'ont pas vraiment mentionnées que j'aime:
Multimap
s sont tout simplement géniaux. Chaque fois que vous utiliseriez quelque chose commeMap<Foo, Collection<Bar>>
, utilisez plutôt une multi-carte et évitez une tonne de vérification fastidieuse d'une collection existante mappée sur une clé et de la créer et de l'ajouter si elle n'est pas là.Ordering
est idéal pour les constructionsComparator
qui se comportent exactement comme vous le souhaitez.Maps.uniqueIndex
etMultimaps.index
: ces méthodes prennent unIterable
et unFunction
et construisent unImmutableMap
ouImmutableListMultimap
qui indexe les valeurs dansIterable
le résultat de l'application de la fonction à chacun. Ainsi, avec une fonction qui récupère l'ID d'un élément, vous pouvez indexer une liste d'éléments par leur ID sur une ligne.filter
,transform
etc. Malgré la verbosité d'utiliser des classes pourFunction
s etPredicate
s, j'ai trouvé cela utile. Je donne un exemple d'une façon de rendre cela bien lu ici .ComparisonChain
est une petite classe facilement négligée qui est utile lorsque vous souhaitez écrire une méthode de comparaison qui compare plusieurs valeurs successivement et qui doit revenir lorsque la première différence est trouvée. Cela supprime tout l'ennui de cela, ce qui en fait juste quelques lignes d'appels de méthode chaînés.Objects.equal(Object,Object)
- nul sûr égal.Objects.hashCode(Object...)
- moyen simple d'obtenir un code de hachage basé sur plusieurs champs de votre classe.Objects.firstNonNull(Object,Object)
- réduit le code pour obtenir une valeur par défaut si la première valeur est nulle, en particulier si la première valeur est le résultat d'un appel de méthode (vous devrez l'assigner à une variable avant de le faire de manière normale).CharMatcher
s ont déjà été mentionnés, mais ils sont très puissants.Throwables
vous permet de faire de belles choses avec les objets jetables, par exemple,Throwables.propagate
qui renvoie un jetable si c'est unRuntimeException
ou unError
et l'enveloppe dans unRuntimeException
et le jette autrement.Je pourrais certainement continuer, mais je dois me mettre au travail. =) Quoi qu'il en soit, malgré ma liste de choses que j'aime ici, le fait est que tout dans Guava est utile dans une situation ou une autre. Une grande partie est utile très souvent. Au fur et à mesure que vous l'utiliserez, vous découvrirez d'autres utilisations. Ne pas l'utiliser vous donnera un peu l'impression d'avoir une main attachée dans le dos.
la source
ComparisionChain
.J'utilise efficacement Guava depuis quelques années, dans Google - et c'est merveilleux.
Les parties que j'aime particulièrement sont:
Charsets.*
- si simple, si utileSplitter
/Joiner
Preconditions
la source
Je l'ai d'abord utilisé pour les collections shorthands. Par exemple, au lieu de:
tu peux le faire:
Il est également facile de remplir des cartes:
Maintenant, j'ai découvert quelques autres utilitaires utiles présents dans Guava. Par exemple, la classe CharMatcher vous permet de faire correspondre des séquences de caractères. Tu peux faire:
ou
la source
La méthode précalculée () de CharMatcher ( source ) est une belle "fonctionnalité cachée" sur laquelle je suis tombé par hasard l'autre jour.
C'est vraiment juste une optimisation, qui crée une table de recherche (en utilisant un tableau de bits), puis recherche simplement les caractères pour voir s'ils "correspondent".
C'est le genre d'optimisation cachée dont vous pouvez tirer parti lorsque vous utilisez une bibliothèque, que vous n'auriez peut-être pas pensé à vous-même dans votre propre code.
Bien sûr, si vous créez un CharMatcher complexe, que vous prévoyez d'utiliser plusieurs fois, vous devez vous rappeler d'appeler la méthode precomputed (), comme:
la source
Voici une vidéo YouTube de Google (conférencier: Kevin Bourrillion, ingénieur en chef des bibliothèques Java de base de Google) qui montre la beauté des collections Google. Une chose que Google a fait, que je trouve brillante, est de garantir l' immuabilité dans les collections.
la source
Google Guava est une bibliothèque utilitaire, donc je doute qu'il y ait une classe tueur à l'intérieur. Tout ce qui concerne l'utilité, c'est que vous l'utilisez presque dans tous les projets que vous avez. Je ne me souviens d'aucun projet que j'ai réalisé qui n'utilise pas la collection Java. Et la vérité est que l'utilitaire de collecte de Google Guava est merveilleux et devrait être dans le SDK Java lui-même.
J'ai écrit trois articles sur les cours sur 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
sur Google Collection (maintenant Guava) http://blog.firdau.si/2009/11/13/computing-map-on-google-collections/Et ce n'est pas tout, il y a beaucoup d'autres choses que vous pouvez faire avec Guava.
la source
Absolument très super utile. C'est presque invariablement la première bibliothèque ajoutée à un nouveau projet.
Dans l'ensemble, la bibliothèque est de très haute qualité. L'API est bien pensée, la mise en œuvre solide. Hautement recommandé.
la source
MapMaker propose désormais des caches LRU limités - ce sont des machines substantielles cachées derrière une petite API. Cela a le potentiel pour une utilité énorme, et je suis toujours partout dans le code.
la source