首先是自定义函数接口,创建一个接口,添加注解@FunctionalInterface
@FunctionalInterface
public interface IAction {
public void action();
}
然后使用就是lambda语句的使用,注意一点,lambda语句只是写一个规则,类似于方法,并不具体赋值。t是声明一个参数,->箭头后是方法体。各个函数接口调用自身方法时会执行方法体的内容,从而实现将方法当作参数传入方法中去。
public class LambdaTest {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
actions(() -> System.out.println("action"));
System.out.println(supply( ()-> "supplier.get"));
System.out.println(predicate((t) -> t==1));
//object -> targetRef.equals(object),即判断"111"是否与传入的参数等同
System.out.println(predicateObj(Predicate.isEqual("111")));
consumer((t) -> System.out.println(t));
}
public static void actions(IAction action) {
action.action();
}
//以下三个是java.util.function包的接口,包里还有众多接口,这里不一一列出
//Supplier接口 无参数返回一个结果
public static String supply(Supplier<String> supplier) {
return supplier.get();
}
//接受一个输入参数,返回一个布尔值结果
public static boolean predicate(Predicate<Integer> predicate) {
int temp = 1;
//predicate.and((t)-> t==2) 返回一个Predicate,其校验规则增加了t==2变成了t==2&&t==1,然后再test执行这个规则,同理还有negate,or
return predicate.and((t)-> t==2).test(temp);
}
public static boolean predicateObj(Predicate<String> predicate) {
String temp = "111";
return predicate.test(temp);
}
//接受一个输入参数并且无返回的操作
public static void consumer(Consumer<String> consumer) {
String temp = "consumer";
consumer.accept(temp);
}
}