前言

lamda表达式只支持函数式接口。

一、函数式接口

什么是函数式接口?

任何一个接口,有且只有 一个抽象方法,那么它就是函数式接口。

典型的函数式接口

public interface mainInterface { void funMethod(); }

对于函数式接口,我们可以用lamda表达式来创建他的实现对象。

二、接口的五种实现方式

①正常类实现

代码案例:

/** * 1.正常接口实现类 */ class FunInterImpl implements FunInter{ //重写该方法 @Override public void method(String name) { System.out.println("我是实现类中的重写方法:" name); } }

②静态内部类实现

//2、静态内部类实现 static class FunInterImpl implements FunInter{ @Override public void method(String name) { System.out.println("我是实现类中的重写方法:" name); } }

③局部内部类实现

//3.局部内部类 class FunInterImpl2 implements FunInter{ @Override public void method(String name) { System.out.println("我是实现类中的重写方法:" name); } }

④匿名内部类实现

//4.匿名内部类,要一分号;结尾 FunInter funInter2 = new FunInter() { @Override public void method(String name) { System.out.println("我是实现类中的重写方法:" name); } };

⑤lamda表达式实现

//5.lamda表达式实现 FunInter funInter3 = (String name) ->{ System.out.println("我是实现类中的重写方法:" name); };

整体代码:

public class NoReturnMultiParam { public static void main(String[] args) { //1.正常实现接口的方式 FunInterImpl funInter = new FunInterImpl(); funInter.method("1、实现类"); System.out.println("***************************************"); //2、静态内部类实现 FunInterImpl funInter1 = new FunInterImpl(); funInter.method("2、静态内部类"); System.out.println("***************************************"); //3.局部内部类 class FunInterImpl2 implements FunInter{ @Override public void method(String name) { System.out.println("我是实现类中的重写方法:" name); } } FunInterImpl2 funInterImpl2 = new FunInterImpl2(); funInterImpl2.method("3、局部内部类"); System.out.println("***************************************"); //4.匿名内部类,要一分号;结尾 FunInter funInter2 = new FunInter() { @Override public void method(String name) { System.out.println("我是实现类中的重写方法:" name); } }; funInter2.method("4、匿名内部类"); System.out.println("***************************************"); //5.lamda表达式实现 FunInter funInter3 = (String name) ->{ System.out.println("我是实现类中的重写方法:" name); }; funInter3.method("5.lamda表达式实现"); } //2、静态内部类实现 static class FunInterImpl implements FunInter{ @Override public void method(String name) { System.out.println("我是实现类中的重写方法:" name); } } } /** * 这个注解是用来标注函数式接口的 * 1.必须注解在接口上 * 2.被注解的接口有且只有一个抽象方法 * 3.被注解的接口可以有默认方法/静态方法,或者重写Object的方法 */ @FunctionalInterface interface FunInter{ void method(String name); } /** * 1.正常接口实现类 */ class FunInterImpl implements FunInter{ //重写该方法 @Override public void method(String name) { System.out.println("我是实现类中的重写方法:" name); } }

执行结果如下:

lambda表达式最佳实践(如何让你的代码写起来更加优雅)(1)

三、lamda表达式

实现方式:

public class lamdaTest01 { public static void main(String[] args) { /** * 多参数无返回 */ NoReturnMultiParam1 n1 = (int a,int b) ->{ System.out.println("多参数无返回:" a b); }; n1.method(1,2); /** * 无参无返回值 */ NoReturnNoParam n2 = ()->{ System.out.println("无参无返回值"); } ; n2.method(); /** * 一个参数无返回 */ NoReturnOneParam n3 = (int a) -> { System.out.println("一个参数无返回" a); }; n3.method(11); /** * 多个参数有返回值 */ ReturnMultiParam n4 = (int a,int b)->{ System.out.println("多个参数有返回值" a); return 1; }; System.out.print("****" n4.method(1, 3)); /** * 无参有返回 */ ReturnNoParam n5 = ()->{ System.out.println("无参有返回"); return 1; }; System.out.print("***" n5.method()); /** * 一个参数有返回值 */ ReturnOneParam n6 = (int a) ->{ System.out.println("一个参数有返回值" a); return a; }; System.out.print("***" n6.method(1)); } } /**多参数无返回*/ @FunctionalInterface interface NoReturnMultiParam1 { void method(int a, int b); } /**无参无返回值*/ @FunctionalInterface interface NoReturnNoParam { void method(); } /**一个参数无返回*/ @FunctionalInterface interface NoReturnOneParam { void method(int a); } /**多个参数有返回值*/ @FunctionalInterface interface ReturnMultiParam { int method(int a, int b); } /*** 无参有返回*/ @FunctionalInterface interface ReturnNoParam { int method(); } /**一个参数有返回值*/ @FunctionalInterface interface ReturnOneParam { int method(int a); }

执行结果如下:

lambda表达式最佳实践(如何让你的代码写起来更加优雅)(2)

四、lamda表达式的简化:

简化的方式

//1.简化参数类型,可以不写参数类型,但是必须所有参数都不写 NoReturnMultiParam1 lamdba1 = (a, b) -> { System.out.println("简化参数类型"); }; lamdba1.method(1, 2); //2.简化参数小括号,如果只有一个参数则可以省略参数小括号 NoReturnOneParam lambda2 = a -> { System.out.println("简化参数小括号"); }; lambda2.method(1); //3.简化方法体大括号,如果方法条只有一条语句,则可以胜率方法体大括号 NoReturnNoParam lambda3 = () -> System.out.println("简化方法体大括号"); lambda3.method(); //4.如果方法体只有一条语句,并且是 return 语句,则可以省略方法体大括号 ReturnOneParam lambda4 = a -> a 3; System.out.println(lambda4.method(5)); ReturnMultiParam lambda5 = (a, b) -> a b; System.out.println(lambda5.method(1, 1));

执行结果如下:

lambda表达式最佳实践(如何让你的代码写起来更加优雅)(3)

总结

写作不易,请点赞、关注、评论给博主一个鼓励吧~

2021最新完整面试题及答案(都整理成文档),有很多干货,包含mysql,netty,spring,线程,spring cloud、JVM、源码、算法等详细讲解,详细的学习规划图等学习资料,私信我:Java 获取!

lambda表达式最佳实践(如何让你的代码写起来更加优雅)(4)

,