publicclassRandomNumHandlerDemo{/*
1. 首先存在一个接口(RandomNumHandler)
2. 在该接口中存在一个抽象方法(getNumber),该方法是无参数但是有返回值
3. 在测试类(RandomNumHandlerDemo)中存在一个方法(useRandomNumHandler)
方法的的参数是RandomNumHandler类型的
在方法内部调用了RandomNumHandler的getNumber方法
*/publicstaticvoidmain(String[] args){useRandomNumHandler(newRandomNumHandler(){@OverridepublicintgetNumber(){Random r =newRandom();int num = r.nextInt(10)+1;return num;}});useRandomNumHandler(()->{Random r =newRandom();int num = r.nextInt(10)+1;return num;// 注意: 如果lambda所操作的接口中的方法, 有返回值, 一定要通过return语句, 将结果返回// 否则会出现编译错误});}publicstaticvoiduseRandomNumHandler(RandomNumHandler randomNumHandler){int result = randomNumHandler.getNumber();System.out.println(result);}}interfaceRandomNumHandler{intgetNumber();}
案例:带参数有返回值的Lambda表达式
publicclassCalculatorDemo{/*
1. 首先存在一个接口(Calculator)
2. 在该接口中存在一个抽象方法(calc),该方法是有参数也有返回值
3. 在测试类(CalculatorDemo)中存在一个方法(useCalculator)
方法的的参数是Calculator类型的
在方法内部调用了Calculator的calc方法
*/publicstaticvoidmain(String[] args){useCalculator(newCalculator(){@Overridepublicintcalc(int a,int b){return a + b;}});useCalculator(( a, b)->return a + b;);}publicstaticvoiduseCalculator(Calculator calculator){int result = calculator.calc(10,20);System.out.println(result);}}interfaceCalculator{intcalc(int a,int b);}
三、Lambda表达式的省略模式
省略的规则
参数类型可以省略。但是有多个参数的情况下,不能只省略一个
如果参数有且仅有一个,那么小括号可以省略
如果代码块的语句只有一条,可以省略大括号和分号,和return关键字
publicclassTest6{publicstaticvoidmain(String[] args){/*useInter( (double a, double b) -> {
return a + b;
});*/useInter((a, b)->
a + b
);}publicstaticvoiduseInter(Inter i){double result = i.method(12.3,22.3);System.out.println(result);}}interfaceInter{// 用于计算 a + b 的结果并返回doublemethod(double a,double b);}