131 votes

La bibliothèque Guava pour java ; quelles sont ses caractéristiques les plus utiles et/ou cachées ?

J'ai parcouru rapidement le site api guava et les 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'un grand intérêt et que 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 de manière inattendue ? L'utiliserez-vous toujours à l'avenir ? Quel a été son principal avantage ou gain de temps ? Quelles sont ses caractéristiques cachées ?

158voto

ColinD Points 48573

Sérieusement, tout dans Guava est utile. Je l'utilise depuis un certain temps, et je découvre toujours quelque chose de nouveau que je peux faire avec lui et qui nécessite moins de code que de le faire à la main.

Certaines choses que d'autres n'ont pas vraiment mentionnées et que j'aime :

  • Multimap sont tout simplement géniales. Chaque fois que vous utilisez quelque chose comme Map<Foo, Collection<Bar>> Si vous avez besoin d'une collection, utilisez plutôt une multimap et épargnez vous une tonne de vérifications fastidieuses pour savoir si une collection existante est associée à une clé, et pour la créer et l'ajouter si elle n'existe pas.
  • Ordering est idéal pour construire Comparator qui se comportent exactement comme vous le souhaitez.
  • Maps.uniqueIndex et Multimaps.index ces méthodes prennent un Iterable et un Function et construire un ImmutableMap ou ImmutableListMultimap qui indexe les valeurs dans le Iterable par 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 en une seule ligne.
  • Les trucs fonctionnels qu'il fournit... filter , transform etc. Malgré la verbosité de l'utilisation des classes pour Function et Predicate j'ai trouvé cela utile. Je donne un exemple d'une façon de faire en sorte que cela se lise bien. ici .
  • ComparisonChain est une petite classe facilement négligée qui est utile lorsque vous voulez écrire une méthode de comparaison qui compare plusieurs valeurs à la suite et qui doit retourner lorsque la première différence est trouvée. Elle supprime tout le côté fastidieux de cette méthode, en ne faisant que quelques lignes d'appels de méthodes enchaînés.
  • Objects.equal(Object,Object) - null safe equals.
  • Objects.hashCode(Object...) - Un moyen simple d'obtenir un code de hachage basé sur plusieurs champs de votre classe.
  • Objects.firstNonNull(Object,Object) - réduit le code permettant d'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 devriez l'assigner à une variable avant de le faire de manière normale).
  • CharMatcher ont déjà été mentionnés, mais ils sont très puissants.
  • Throwables vous permet de faire des choses intéressantes avec les objets à jeter, telles que Throwables.propagate qui relance un throwable si c'est un RuntimeException ou un Error et l'enveloppe dans un RuntimeException et le rejette dans le cas contraire.

Je pourrais certainement continuer, mais je dois me mettre au travail. =) Quoi qu'il en soit, bien que j'aie énuméré ici certaines choses que j'aime, le fait est que tout dans Guava est utile dans une situation ou une autre. Une grande partie est utile très souvent. En l'utilisant, vous découvrirez d'autres utilisations. Si vous ne l'utilisez pas, vous aurez un peu l'impression d'avoir une main attachée dans le dos.

43voto

Jon Skeet Points 692016

J'utilise effectivement Guava depuis quelques années, au sein de Google - et c'est merveilleux.

Les parties que je suis notamment aiment bien :

  • Charsets.* - si simple, si utile
  • Collections
  • Gestion des entrées/sorties (lecture complète d'une ressource en une seule ligne, etc)
  • Splitter / Joiner
  • Preconditions

28voto

dogbane Points 85749

Je l'ai d'abord utilisé pour les raccourcis de collections. Par exemple, au lieu de :

Map<String, Map<Long, List<String>>> map = new HashMap<String, Map<Long, List<String>>>();

vous pouvez le faire :

Map<String, Map<Long, List<String>>> map = Maps.newHashMap();

Il est également facile de remplir les cartes :

ImmutableMap<String,String> map = ImmutableMap.of("key1", "value1", "key2", "value2");

Maintenant, j'ai découvert d'autres utilitaires utiles présents dans Guava. Par exemple, le CharMatcher vous permet de faire correspondre des séquences de caractères. Vous pouvez le faire :

CharMatcher.inRange('a','z').or(inRange('A','Z'));

ou

String phoneNumber = CharMatcher.DIGIT.retainFrom("my phone number is 123456789");

21voto

Etienne Neveu Points 7454

La méthode precomputed() du CharMatcher ( source ) est une belle "fonction cachée" sur laquelle je suis tombé par hasard l'autre jour.

Il s'agit simplement d'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 que vous pouvez exploiter lorsque vous utilisez une bibliothèque, et à laquelle 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 souvenir d'appeler la méthode precomputed(), comme :

CharMatcher complexMatcher = CharMatcher.anyOf("cat")
                                        .or(CharMatcher.DIGIT)
                                        .or(CharMatcher.WHITESPACE)
                                        .precomputed();

16voto

Buhake Sindi Points 38654

Voici un Vidéo YouTube de Google (orateur : Kevin Bourrillion, ingénieur principal pour les bibliothèques Java de base de Google) qui montre la beauté des collections Google. Une chose que Google a faite, et que je trouve brillante, est la suivante garantie Immuabilité dans les collections.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X