Guava library for java; jakie są jej najbardziej przydatne i/lub ukryte funkcje [closed]
Przeprowadziłem Szybkie skanowanie Guava API i nowych typów kolekcji, które dostarcza(Multimap
i BiMap
na przykład wydają się przydatne) i myślę o włączeniu biblioteki do projektu(projektów), nad którym pracuję. Jednak mam również powściągliwość, aby włączyć biblioteki, jeśli nie są one zbytnio korzystne, a poznanie funkcji marnuje cenny czas.
Czy włączyłeś bibliotekę Guava do swojego projektu i czy okazała się przydatna w jakiś nieoczekiwany sposób? Czy zawsze go używasz w przyszłości? Jaka była jego główna korzyść / oszczędność czasu? Jakie są jego ukryte cechy?
8 answers
Poważnie, wszystko w Guava jest przydatne. Używam go od dłuższego czasu i wciąż odkrywam coś nowego, co mogę z nim zrobić, co zajmuje mniej kodu niż ręczne robienie tego.
Niektóre rzeczy, o których inni tak naprawdę nie wspominali, że kocham:
-
Multimap
s są po prostu świetne. Za każdym razem, gdy użyjesz czegoś takiego jakMap<Foo, Collection<Bar>>
, użyj zamiast tego multimapy i zaoszczędź mnóstwo żmudnego sprawdzania istniejącej kolekcji zmapowanej do klucza oraz tworzenia i dodawania jej, jeśli nie ma. -
Jest świetny do budowania
Comparator
S, które zachowują się tak, jak chcesz. -
Maps.uniqueIndex
iMultimaps.index
: te metody pobierająIterable
i aFunction
i budująImmutableMap
lubImmutableListMultimap
, które indeksują wartości wIterable
przez wynik zastosowania funkcji do każdej z nich. Dzięki funkcji, która pobiera ID elementu, możesz indeksować listę elementów według ich ID w jednej linii. - rzeczy funkcjonalne, które zapewnia...
filter
,transform
, itd. Pomimo chytrości korzystania z klas dlaFunction
s IPredicate
S, uznałem to za przydatne. Podaję przykład jednego ze sposobów, aby to ładnie przeczytać tutaj . -
ComparisonChain
jest małą, łatwą do przeoczenia klasą, która jest przydatna, gdy chcesz napisać metodę porównywania, która porównuje wiele wartości po kolei i powinna powrócić, gdy znajdzie się pierwsza różnica. Usuwa z tego całą nudę, czyniąc z niej tylko kilka linii łańcuchowych wywołań metod. -
Objects.equal(Object,Object)
- null safe równa się. -
Objects.hashCode(Object...)
- łatwy sposób na uzyskanie hasha kod oparty na wielu polach twojej klasy. -
Objects.firstNonNull(Object,Object)
- zmniejsza kod do uzyskania wartości domyślnej, Jeśli pierwsza wartość jest null, zwłaszcza jeśli pierwsza wartość jest wynikiem wywołania metody(musisz przypisać ją do zmiennej przed wykonaniem tego w normalny sposób). - Były już wspomniane, ale są bardzo potężne.
-
Throwables
pozwala zrobić kilka fajnych rzeczy z throwables, np.Throwables.propagate
który ponownie rzuca, jeśli jest toRuntimeException
lubError
i owija go wRuntimeException
i rzuca, że inaczej.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-21 16:34:31
Od kilku lat skutecznie używam guawy w Google - i jest cudownie.
Części, które lubię szczególnie to:
-
Charsets.*
- so simple, so useful - Kolekcje W ten sposób można uzyskać dostęp do wszystkich zasobów w jednym wierszu.]}
-
Splitter
/Joiner
Preconditions
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-21 10:40:30
Początkowo używałem go do stenografii kolekcji. Na przykład zamiast:
Map<String, Map<Long, List<String>>> map = new HashMap<String, Map<Long, List<String>>>();
Możesz to zrobić:
Map<String, Map<Long, List<String>>> map = Maps.newHashMap();
Łatwo jest też wypełniać mapy:
ImmutableMap<String,String> map = ImmutableMap.of("key1", "value1", "key2", "value2");
Teraz odkryłem kilka innych użytecznych narzędzi obecnych w Guava. Na przykład klasa CharMatcher pozwala dopasować sekwencje znaków. Można zrobić:
CharMatcher.inRange('a','z').or(inRange('A','Z'));
Lub
String phoneNumber = CharMatcher.DIGIT.retainFrom("my phone number is 123456789");
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-25 17:13:28
Metoda charmatcher 's precomputed () (Źródło) jest miłą "ukrytą cechą", na którą natknąłem się pewnego dnia.
To tak naprawdę tylko optymalizacja, która tworzy tabelę wyszukiwania (używając tablicy bitów), a następnie po prostu wyszukuje znaki, aby sprawdzić, czy "pasują".
Jest to rodzaj ukrytej optymalizacji, którą możesz wykorzystać, gdy używasz biblioteki, której możesz nie myśleć o sobie we własnym kodzie.
Oczywiście, jeśli tworzysz złożony CharMatcher, które planujesz użyć wiele razy, musisz pamiętać, aby wywołać metodę precomputed (), jak:
CharMatcher complexMatcher = CharMatcher.anyOf("cat")
.or(CharMatcher.DIGIT)
.or(CharMatcher.WHITESPACE)
.precomputed();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-09 13:22:13
Oto wideo YouTube od Google (prelegent: Kevin Bourrillion, główny inżynier dla podstawowych bibliotek Java Google), który pokazuje piękno kolekcji Google. Jedną z rzeczy, które zrobił Google, która moim zdaniem jest genialna, jest gwarancja niezmienności w kolekcjach.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-13 11:30:22
Google Guava jest biblioteką narzędzi, więc wątpię, że jest w niej zabójcza Klasa. Cała sprawa z użytecznością polega na tym, że prawie używasz jej w każdym projekcie, który masz. Nie pamiętam żadnego projektu, który nie korzystał z Java collection. A prawda jest taka, że użyteczność kolekcji Google Guava jest wspaniała i powinna być w samym Java SDK.
Napisałem trzy artykuły o klasach na Google Guava:
- Using
CheckedFuture
: http://blog.firdau.si/2010/07/07/guava-using-checkedfuture / - za pomocą
ListenableFuture
: http://blog.firdau.si/2010/07/05/guava-using-listenablefuture / -
ComputingMap
on Google Collection (now Guava) http://blog.firdau.si/2009/11/13/computing-map-on-google-collections /
I to nie wszystko, jest wiele innych rzeczy, które możesz zrobić z Guavą.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-21 10:51:16
Absolutnie bardzo przydatne. To prawie niezmiennie pierwsza biblioteka dodana do nowego projektu.
- bardzo lubimy Iteratory/Iterables i interfejs funkcji.
- Rodzina interfejsów to wielkie abstrakcje
- jesteśmy tak zaangażowani, że zaczęliśmy używać klas ImmutableXXX naszych typów API do komunikowania się, że nie można tego zmienić.
- Obliczanie map (od MapMaker) jest wspaniałe w pewnych sytuacjach.
Ogólnie rzecz biorąc, Biblioteka jest bardzo wysokiej jakości. API jest dobrze przemyślane, implementacja solidna. Gorąco polecam.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-23 04:01:11
MapMaker oferuje teraz ograniczone pamięci podręczne LRU - to znaczna maszyna ukryta za malutkim API. To ma potencjał ogromnej użyteczności, a ja wciąż jestem na całym kodzie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-25 18:40:22