Java8 - Memo

Supplier<T>

通常使用log4j會有以下程式碼去避免昂貴的debug操作:

if( logger.isDebugEnable() ){
	logger.debug("{}", expensiveMethod());
}
isDebugEnable()應該封裝於debug中,lazy loading可解決我們的問題:
logger.debug(() -> expensiveMethod());
public void debug(Supplier<String> aSupplier){
	if( debug ){
		log(aSupplier.get());
	}
}

Optional

透過Optional的採用預設值方式,可以避免null與減少null判斷:

Optional<String> item = Optional.empty();
if( xxxx ){
	try {
		item = Optional.ofNullable(evaluateItem());
	} catch( Exception e ) {
		// handle exception
	}
}
 
return item.orElse("");

List To Map

List<Object> list = Arrays.asList("123", "456"); 
Map<Integer, Object> map = list.stream().collect(Collectors.toMap(Object::hashCode, o-> o));