35 lines
1006 B
Java
35 lines
1006 B
Java
package tc.oc.commons.core.util;
|
|
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
import java.util.function.Consumer;
|
|
import java.util.function.UnaryOperator;
|
|
|
|
public interface Functions {
|
|
static <T, R, E extends Exception> ThrowingFunction<T, R, E> memoize(ThrowingFunction<T, R, E> function) {
|
|
final Map<T, R> results = new HashMap<>();
|
|
return t -> MapUtils.computeIfAbsent(results, t, function);
|
|
}
|
|
|
|
/**
|
|
* Return a {@link UnaryOperator} that passes its operand to
|
|
* the given {@link Consumer} and then returns it.
|
|
*/
|
|
static <T> UnaryOperator<T> tap(Consumer<? super T> consumer) {
|
|
return t -> {
|
|
consumer.accept(t);
|
|
return t;
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Like {@link #tap} except the consumer is skipped if the operand is null
|
|
*/
|
|
static <T> UnaryOperator<T> tapUnlessNull(Consumer<? super T> consumer) {
|
|
return t -> {
|
|
if(t != null) consumer.accept(t);
|
|
return t;
|
|
};
|
|
}
|
|
}
|