Guava to bardzo przydatna biblioteka do Javy stworzona przez Google. Pomimo pojawienia się JDK 8, które dostarcza nam więcej utilsów, Guava nadal pozostaje podstawową biblioteką do Javy, upraszczającą codzienne programowanie, wykorzystywanie najpopularniejszych algorytmów i sprawiającą że kod wygląda bardziej “elegancko”. Poniżej przedstawienie kilku podstawowych ficzerów Guavy.
Unikanie NullPointerException
Wartość null jest powszechnie spotykana w Javie. Programiści często zapominają zabezpieczyć program przed wystąpieniem null’a (np dla informacji pobieranych z bazy danych). Guava pozwala nam “opakować” potencjalnie niebezpieczny fragment kodu w ten sposób:
Optional<Integer> optional = Optional.ofNullable(possiblyNullableVariable); if(optional.isPresent()) { return optional.get(); }
Możemy również od razu wyznaczyć wartość, która ma zostać zwrócona w przypadku pojawienia się null:
Integer optional = Optional.ofNullable(possiblyNullableVariable).orElse(0);
Sortowanie kolekcji
Guava wspiera nas również przy sortowaniu np list. Możemy skorzystać z dwóch zdefiniowanych typów sortowania: natural i usingToString() lub zdefiniować własne sortowanie:
Ordering<String> poDlugosciLancucha = new Ordering<String>() { public int compare(String left, String right) { return Ints.compare(left.length(), right.length()); } };
Przydatnym również jest tzw chaining, czyli opakowywanie jednego typu sortowania w inny, aby uzyskać ostateczny efekt:
Ordering<Test> ordering = Ordering.natural().nullsFirst().onResultOf(new Function<Test, String>() { public String apply(Test t) { return t.sortedBy; } });
Myślę, że jest to tak bardzo czytelne, że nie wymaga komentarza.
Equals i hashCode
W Javie każda klasa modelująca dane (np encja) powinna mieć zaimplementowaną metodę equals, która służy oczywiście do porównywania obiektów. Z kontraktu equals-hashCode wynika, że implementacja equals powinna pociągnąć za sobą również dodanie metody hashCode (złamanie kontraktu może skutkować np niepoprawnym sortowaniem kolekcji). Guava również i tutaj dostarcza nam bardzo fajne utilsowe metody, które pozwalają łatwo i bez bólu zaimplementować wspomniane wyżej metody:
Objects.equal(obj1, obj2); Objects.hashCode(field1, field2, ..., fieldn);
Pamiętajmy, że większość profesjonalnych IDE ma wbudowaną opcję wygenerowania tych metod na podstawie podanego przez nas szablonu (np z Guava).