У меня было быстрое сканирование API Guava и новых типов коллекций, которые он предоставляет ( Multimap
и, BiMap
например, кажутся полезными), и я думаю о включении библиотеки в проекты, над которыми я работаю.
Однако я также не хочу включать библиотеки, если они не приносят большой пользы, а изучение функций тратит драгоценное время.
Включили ли вы библиотеку Guava в свой проект и оказалась ли она полезной каким-либо неожиданным образом? Вы бы всегда использовали его в будущем? В чем заключалась его основная выгода / экономия времени? В чем его скрытые особенности?
Ответы:
Серьезно, в Гуаве все полезно. Я использую его довольно давно, и все еще всегда открываю для себя что-то новое, что я могу сделать с ним, для чего требуется меньше кода, чем при выполнении вручную.
Некоторые вещи, о которых я люблю, не упомянули:
Multimap
просто великолепны. Каждый раз, когда вы будете использовать что-то вроде этогоMap<Foo, Collection<Bar>>
, используйте вместо этого multimap и сэкономьте массу утомительной проверки существующей коллекции, сопоставленной с ключом, и создания и добавления ее, если ее там нет.Ordering
отлично подходит для создания объектов,Comparator
которые ведут себя так, как вы хотите.Maps.uniqueIndex
иMultimaps.index
: эти методы принимаютIterable
иFunction
и создаютImmutableMap
или,ImmutableListMultimap
которые индексируют значения вIterable
результате применения функции к каждому. Таким образом, с помощью функции, которая извлекает идентификатор элемента, вы можете индексировать список элементов по их идентификатору в одной строке.filter
,transform
и т.д. Несмотря на многословие с использованием классов дляFunction
s- иPredicate
с, я нашел , что это полезно. Я приведу пример одного из способов сделать это читать красиво здесь .ComparisonChain
- это небольшой класс, на который легко не обращать внимания, который полезен, когда вы хотите написать метод сравнения, который последовательно сравнивает несколько значений и должен возвращаться при обнаружении первого различия. Он устраняет всю эту утомительность, делая всего лишь несколько строк связанных вызовов методов.Objects.equal(Object,Object)
- нулевое безопасное равно.Objects.hashCode(Object...)
- простой способ получить хэш-код на основе нескольких полей вашего класса.Objects.firstNonNull(Object,Object)
- уменьшает код для получения значения по умолчанию, если первое значение равно нулю, особенно если первое значение является результатом вызова метода (вам придется присвоить его переменной, прежде чем делать это обычным способом).CharMatcher
s уже упоминались, но они очень мощные.Throwables
позволяет вам делать некоторые приятные вещи сThrowables.propagate
метательными объектами , например, который повторно бросает объект, если это aRuntimeException
или an,Error
и оборачивает его в aRuntimeException
и бросает в противном случае.Конечно, я мог бы продолжить, но мне нужно приступить к работе. =) В любом случае, несмотря на то, что я перечислил некоторые вещи, которые мне нравятся здесь, факт в том, что все в Guava полезно в той или иной ситуации. Многие из них очень часто используются. По мере использования вы откроете для себя больше применений. Если вы не пользуетесь им, это будет похоже на то, как если бы одна рука была связана за спиной.
источник
ComparisionChain
.Я эффективно использую Guava в течение нескольких лет в Google - и это замечательно.
Мне особенно нравятся следующие части:
Charsets.*
- так просто, так полезноSplitter
/Joiner
Preconditions
источник
Изначально я использовал его для сокращений коллекций. Например, вместо:
ты можешь сделать это:
Карты также легко заполнять:
Теперь я обнаружил некоторые другие полезные утилиты, присутствующие в Guava. Например, класс CharMatcher позволяет сопоставлять последовательности символов. Ты можешь сделать:
или
источник
Метод precomputed () ( источник ) CharMatcher - это хорошая «скрытая функция», на которую я наткнулся на днях.
На самом деле это просто оптимизация, которая создает таблицу поиска (с использованием битового массива), а затем просто ищет символы, чтобы увидеть, «совпадают ли они».
Это та скрытая оптимизация, которую вы можете использовать при использовании библиотеки, о которой вы, возможно, даже не подумали в своем собственном коде.
Конечно, если вы создаете сложный CharMatcher, который планируете использовать много раз, вы должны не забыть вызвать метод precomputed (), например:
источник
Вот видео на YouTube от Google (докладчик: Кевин Бурриллион, ведущий инженер основных Java-библиотек Google), демонстрирующее красоту коллекций Google. Одна вещь, которую сделал Google, что я считаю блестящей, - это гарантия неизменности коллекций.
источник
Google Guava - это служебная библиотека, поэтому я сомневаюсь, что внутри нее есть класс-убийца. Вся суть в полезности заключается в том, что вы почти используете ее в каждом своем проекте. Я не могу вспомнить ни одного проекта, в котором не использовалась бы коллекция Java. И по правде говоря, утилита сбора данных Google Guava прекрасна и должна быть в самом Java SDK.
Я написал три статьи о классах в 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
в Google Collection (теперь Guava) http://blog.firdau.si/2009/11/13/computing-map-on-google-collections/И это еще не все, есть еще много всего, что вы можете делать с помощью Guava.
источник
Абсолютно очень полезно. Почти всегда это первая библиотека, добавляемая в новый проект.
В целом библиотека очень качественная. API хорошо продуман, реализация солидная. Настоятельно рекомендуется.
источник
MapMaker теперь предлагает ограниченные кэши LRU - это серьезный механизм, скрытый за крошечным API. Это может принести огромную пользу, и я все еще разбираюсь в коде.
источник