Eu fiz uma varredura rápida da API do Guava e dos novos tipos de coleção que ela fornece ( Multimap
e, BiMap
por exemplo, parecem úteis) e estou pensando em incluir a biblioteca nos projetos nos quais trabalho.
No entanto, também tenho a reticência de incluir bibliotecas à vontade, se não forem de grande benefício, e o aprendizado dos recursos desperdiça um tempo valioso.
Você incluiu a biblioteca Guava no seu projeto e se mostrou útil de alguma maneira inesperada? Você sempre o usaria no futuro? Qual tem sido seu principal benefício / economia de tempo? Quais são seus recursos ocultos?
Respostas:
Sério, tudo na Goiaba é útil. Eu o uso há bastante tempo e ainda estou sempre descobrindo algo novo que posso fazer com isso, que requer menos código do que fazê-lo manualmente.
Algumas coisas que outros realmente não mencionaram que eu amo:
Multimap
s são ótimos. Sempre que você usar algo comoMap<Foo, Collection<Bar>>
, use uma multimapa e economize uma tonelada de verificação tediosa para uma coleção existente mapeada para uma chave, criando e adicionando-a, se não estiver lá.Ordering
é ótimo para construirComparator
s que se comportam exatamente como você deseja.Maps.uniqueIndex
eMultimaps.index
: estes métodos levam umIterable
e umFunction
e construir umaImmutableMap
ouImmutableListMultimap
que indexa os valores naIterable
pelo resultado da aplicação da função para cada. Portanto, com uma função que recupera o ID de um item, você pode indexar uma lista de itens por seu ID em uma linha.filter
,transform
etc. Apesar da verbosidade de usar classes paraFunction
s ePredicate
s, achei isso útil. Dou um exemplo de uma maneira de fazer isso bem lido aqui .ComparisonChain
é uma classe pequena e facilmente esquecida, útil quando você deseja escrever um método de comparação que compara vários valores em sucessão e deve retornar quando a primeira diferença for encontrada. Ele remove todo o tédio disso, tornando-o apenas algumas linhas de chamadas de método em cadeia.Objects.equal(Object,Object)
- nulo seguro é igual.Objects.hashCode(Object...)
- maneira fácil de obter um código hash com base em vários campos da sua classe.Objects.firstNonNull(Object,Object)
- reduz o código para obter um valor padrão se o primeiro valor for nulo, especialmente se o primeiro valor for o resultado de uma chamada de método (você teria que atribuí-lo a uma variável antes de fazer isso da maneira normal).CharMatcher
s já foram mencionados, mas são muito poderosos.Throwables
permite que você faça coisas agradáveis com jogáveis, como oThrowables.propagate
que reproduz novamente um jogável se for umRuntimeException
ou umError
e o envolve em umRuntimeException
e joga de outra maneira.Eu certamente poderia continuar, mas tenho que começar a trabalhar. =) De qualquer forma, apesar de ter listado algumas coisas que gosto aqui, o fato é que tudo na Goiaba é útil em uma situação ou outra. Muito disso é útil com muita frequência. Ao usá-lo, você descobrirá mais usos. Não usá-lo será como ter uma mão amarrada nas costas.
fonte
ComparisionChain
.Uso o Guava há alguns anos, dentro do Google - e é maravilhoso.
As partes de que gosto particularmente são:
Charsets.*
- tão simples, tão útilSplitter
/Joiner
Preconditions
fonte
Inicialmente, usei-o para coletas de taquigrafia. Por exemplo, em vez de:
você consegue fazer isso:
Também é fácil preencher mapas:
Agora, eu descobri alguns outros utilitários úteis presentes no Guava. Por exemplo, a classe CharMatcher permite combinar sequências de caracteres. Você pode fazer:
ou
fonte
O método pré-computado () (de origem ) do CharMatcher é um bom "recurso oculto" que encontrei no outro dia.
É realmente apenas uma otimização, que cria uma tabela de pesquisa (usando uma matriz de bits) e, em seguida, simplesmente consulta os caracteres para ver se eles "correspondem".
É o tipo de otimização oculta que você pode aproveitar ao usar uma biblioteca, que você pode não ter pensado em si mesmo em seu próprio código.
Obviamente, se você criar um CharMatcher complexo, que planeja usar várias vezes, lembre-se de chamar o método precomputed (), como:
fonte
Aqui está um vídeo do YouTube do Google (palestrante: Kevin Bourrillion, engenheiro-chefe das principais bibliotecas Java do Google), que mostra a beleza das coleções do Google. Uma coisa que o Google fez, que acredito ser brilhante, é garantir a imutabilidade nas coleções.
fonte
O Google Guava é uma biblioteca de utilitários, então duvido que haja uma classe matadora dentro dela. A coisa toda sobre utilidade é que você quase usa isso em todos os projetos que possui. Não me lembro de nenhum projeto que fiz que não use a coleção Java. E a verdade é que o utilitário de coleta do Google Guava é maravilhoso e deve estar no próprio Java SDK.
Escrevi três artigos sobre aulas no 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
na Coleção do Google (agora Guava) http://blog.firdau.si/2009/11/13/computing-map-on-google-collections/E isso não é tudo, há muitas outras coisas que você pode fazer com a goiaba.
fonte
Absolutamente muito super útil. É quase invariavelmente a primeira biblioteca adicionada a um novo projeto.
No geral, a biblioteca é de alta qualidade. A API é bem pensada, a implementação é sólida. Altamente recomendado.
fonte
O MapMaker agora oferece caches LRU limitados - isso é uma maquinaria substancial escondida atrás de uma pequena API. Isso tem potencial para enorme utilidade, e eu ainda estou por todo o código.
fonte