Predicate.test和Consumer.accept接口定义
@FunctionalInterface
public interface Predicate<T> {
/**
* Evaluates this predicate on the given argument.
*
* @param t the input argument
* @return {@code true} if the input argument matches the predicate,
* otherwise {@code false}
*/
boolean test(T t);
------------------------------------
@FunctionalInterface
public interface Consumer<T> {
/**
* Performs this operation on the given argument.
*
* @param t the input argument
*/
void accept(T t);
Predicate.test用于条件判断,如果返回true,执行Consumer.accept中的修改或者执行操作
简单的使用场景,菜单表parentId自身引用,如果没有父菜单,parentId=0
Consumer<Menu> parentConsumer = menu-> menu.setParentId(DEFAULT_PARENT_ID);
Predicate<Menu> predicate = menu-> menu.getParentId() == null;
if(predicate.test(menu)) parentConsumer.accept(menu);
上面这种情况其实直接写个if判断,然后直接修改就可以,但是有时候一个判断条件有时候会重复写个几次,这时候定义一个Predicate就比较好了,代码更简洁,加上变量命名,可读性更好