Guava: Google Core Libraries for Java (Permalink)

Google bietet in der Bibliothek Guava einige interessante Klassen an. Diese lösen Probleme, die mit der Standard-API nur auf Umwegen lösbar sind.

com.google.common.base.Joiner und com.google.common.base.Splitter

Joiner bietet das häufig vermisste Äquivalent von PHPs implode an. Allerdings ist der Funktionsumfang höher. Konfigurierbar ist welches Zeichen oder welche Zeichenkette zum Verbinden eingefügt werden soll, wie mit null-Werten verfahren wird (Ersetzen durch feste Zeichenkette oder überspringen). Weiterhin können nicht nur Arrays sondern auch Iteratoren als Eingabe verwendet werden. Über die Funktion withKeyValueSeparator und den gelieferten MapJoiner können auch Maps in Strings verwandelt werden.

Splitter ist das Gegenstück und das Äquivalent zu PHPs explode. Aufgeteilt werden kann nach einer festen Länge, an einzelnen Zeichen, Zeichenketten und Mustern. Weiterhin gibt es auch den MapSplitter und eine Funktion um die Ergebnisse automatisch zu trimmen.

Unverständlicherweise bietet die Klasse keine Möglichkeit an, direkt ein Array als Resultat eines Splits zu bekommen. Geliefert wird ein Iterable<String> welches dann über Iterables.toArray(iterable, String.class) in ein String[] gewandelt wird.

com.google.common.base.Preconditions

Die Methoden dieser Klasse erlauben das vereinfachte, übersichtlichere Prüfen von Vorbedingungen der aufrufenden Methode. Beispielsweise kann der Code

if ( input == null ) {
    throw 
        new NullPointerException("The parameter input was null!");
}

ersetzt werden durch

checkNotNull(input, "The parameter input was null!");

Weitere Methoden überprüfen die Gültigkeit von Indices in Felder und Listen. Im Fehlerfall wird hier eine IndexOutOfBoundsException geworfen. Mit den Funktionen checkState wird der interne Zustand der Instanz geprüft, unabhängig von den Argumenten der Methode. Weitere Informationen findet man in der Api zu den Preconditions.

com.google.common.base.Stopwatch

Die Klasse Stopwatch bietet die Funktionalität einer klassischen Stoppuhr mit einer Genauigkeit von Millisekunden.

Stopwatch stopwatch = new Stopwatch().start();
// zu messender Bereich 
System.out.println("Time elapsed in seconds: " + 
    stopwatch.stop().elapsedTime(TimeUnit.SECONDS));

Sieht eleganter aus und ist flexibler als der Klassiker mit System.getTimeInMillis() und ähnlichen. Weitere Informationen findet man in der  Api.

com.google.common.base.Strings

Die Methoden der Klasse Strings geben dem Entwickler einige Funktionen an die Hand, die im praktischen Programmieren im Umgang mit Zeichenketten hilfreich sein können.

Häufig muss man bei Strings prüfen, ob überhaupt eine Zeichenkette vorhanden ist, also weder null noch ein leerer String vorliegt, oder man will einen leeren String in null wandeln oder umgekehrt (Funktionen emptyToNullisNullOrEmpty und nullToEmpty).

Viele Sprachen bieten direkt die Wiederholung von Strings (Beispielsweise 1000 * "Danke") an, hier wird dies über die Funktion repeat nachgeliefert.

Weitere Funktionen füllen Strings von rechts oder links mit Zeichen auf, bis diese eine feste Länge besitzen (padStart und padEnd) oder identifizieren gemeinsame Prä- und Suffixe (commonPrefix und commonSuffix).

Guava und Maven

Nichts einfacher als das, einfach folgende Dependency einfügen:

<dependency>  
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>13.0.1</version>
</dependency>