Function
public interface Function<F,T> {
T apply (F input);
boolean equals(Object object);
}
forMap
New Function to help find value by given key in a map
Function<String, State> lookup = Function.forMap(stateMap);
lookup.apply("NY");
compose
This method takes two Function instance as arguments, firstly invokes the latter one, then the return value is used as a parameter to the apply method of the former function and return a composition Function of the two.
public class StateToCityString implements Function<State, String> {
@override
public String apply(State input){
return Joiner.on(",").join(input.getMainCities());
}
}
Function stateFun = new StateToCityString();
Function composedFun = Function.compose(stateFun, lookup);
String result = compoeseFun.apply("NY");
Predicate
Functional cousin to the Function interface. While Function interface is used to transform objects, the Predicate interface is used to filter objects.
Able to work with multi-Boolean conditions, chaining instance with and or not
.
Predicate chainPre = Predicate.and/or(pre1, pre2);
Predicate.and/or(Iterable<Predicate<T>>);
Predicate.and/or(Predicate<T> ...predicates);
Predicate inversePre = Predicate.not(pre1);
Predicate composePre = Predicate.compose(pre1, fun);
Supplier
When get return the same instance of given type or a new instance with each invocation, abstract the complexity and details of creating an object.
public interface Supplier<T> {
T get();
}
Singleton: the first call passed to the delegate Supplier instance, create and return the wrapping Supplier object, which caches the instance before returning to caller. All subsequent calls to the get method return the cached instance.
Supplier<T> wrapped = Suppliers.memoize(supplier);
Supplier<T> wrapped = Suppliers.memoizeWithExpiration(supplier, duration, timeUnit);