#1. You can use Optional instead of simply returning null in some specific cases:
Insted of:
     /**  
     * Can return null in specific cases... but it's
     * hard to remember
     */
    public static String someMethod() {
        String returnValue = null;
        if (new Date().getTime() % 2 == 0) {
            returnValue = "time % 2 == 0";
        }
        return returnValue;
    }
    public static void main(String[] args) {
        String str = someMethod();
        str.contains("%") // will crash
    }
use this:
    /**
     * Explicite shows, that method can
     * return empty (null) value
     */
    public static Optional< String > someMethod() {
        Optional< String > returnValue = Optional.absent();
        if (new Date().getTime() % 2 == 0) {
            returnValue = Optional.of(new String());
        }
        return returnValue;
    }
    public static void main(String[] args) {
        Optional< String > str  = someMethod();
        if(str.isPresent()) {
            // here you know that value is not null
        }
        // or you can operate on given value or a default one
        str.or("default value").contains("%");
    }
#2 You can use firstNonNull from Guavas Objects class insted of write "if else"
Insted of:
    public T foo() {
        ...
        ...
        if(first != null) {
            return first;
        } else {
            return second;
        }
    }
use this:
import static com.google.common.base.Objects.firstNonNull;
...
    public T foo() {
        ...
        ...
        return firstNonNull(first, second);
    }
#3 You can use Guava Strings class methods to deal with null or empty Strings
Insted of:
if(str == null) {
    str = "";
}
if("".equals(str)) {
    str = null;
}
if(str == null || str.length() == 0) {
   // is null or empty
}
use this:
import static com.google.common.base.Strings.*;
str = nullToEmpty(str);
str = emptyToNull(str);
if(isNullOrEmpty(str)) {
   // is null or empty
}
#4 You can use Object.equals(a, b) to check equality safely
Insted of:a.equals(b); // will crash if a is nulluse this:
import static com.google.common.base.Objects.equal; ... equal(a, null); // return false equal(null, null); // return true equal(a, b); // return true if a is equal b
#5 You can use Joiner to join Strings
Insted of:
StringBuffer buffer = new StringBuffer();
for (String str : strs) {
    if (str != null) {
        buffer.append(str);
        buffer.append(", ");
    }
}
if (buffer.length() >= 2) {
    buffer.substring(0, buffer.length() - 2);
}
return buffer.toString();
use this:
import com.google.common.base.Joiner;
...
return Joiner.on(", ").skipNulls().join(strs);
#6 You can use Splitter to split String
Insted of:
String str = "abc, bcd,, cde   ,zsa";
String[] split = str.split(",");
// What with trimming? Whitespaces? Empty strings???
use this:
import com.google.common.base.Splitter;
...
Splitter.on(',')
       .trimResults()
       .omitEmptyStrings()
       .split("abc, bcd,, cde   ,zsa");
#7 You can use Multiset to count object occurences
Insted of:
Map< String, Integer > countMap = new HashMap< String, Integer >();
for (String word : words) {
    if(!countMap.containsKey(word)) {
        countMap.put(word, 0);
    }
    countMap.put(word, countMap.get(word) + 1);
}
use this:
import com.google.common.collect.HashMultiset; import com.google.common.collect.Multiset; ... Multiset< String > wordsMultiset = HashMultiset.create(); wordsMultiset.addAll(words);
#8 You can use Multimap insted of map with List or Set as values
Insted of:
Map< String, List< String > > languagesMap = new HashMap< String, List< String >>();
for (Programmer programmer : programmers) {
    if (languagesMap.get(programmer.getLanguage()) != null) {
        languagesMap.put(programmer.getLanguage(), new ArrayList< String >());
    }
    languagesMap.get(programmer.getLanguage()).add(programmer.getEmail());
}
use this:
import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap;
...
Multimap< String, String > languagesMap = HashMultimap.create();
for (Programmer programmer : programmers) {
    languagesMap.put(programmer.getLanguage(), programmer.getEmail());
}
...next simple, but usable examples soon...









