Lambda表达式
1.Lambda使用前提
2.需求:给定一个动物名称,重写eat()方法,在控制台输出
-
完整代码可以直接复制过去运行看结果
-
方式一:匿名内部类
-
定义一个接口,里面有一个抽象方法,且需要一个字符串类型的形参
interface Animal { void eat(String name); }
-
主方法定义一个方法,方法的形参是接口类型
//定义一个方法,形参是:Animal接口类性和String字符串类型 private static void useAnimal(Animal a, String name) { a.eat(name); }
-
使用匿名内部类的方式在主方法调用useAnimal方法
public class LambdaDemo1 { public static void main(String[] args) { String tomName = "Tom"; useAnimal(new Animal() { @Override public void eat(String name) { System.out.println(name + "在捉杰瑞");//控制台输出:Tom在捉杰瑞 } }, tomName); } }
-
完整代码:可以直接复制运行(注意修改类型:即将LambdaDemo1改成你创建类的名称)
public class LambdaDemo1 { public static void main(String[] args) { String tomName = "Tom"; useAnimal(new Animal() { @Override public void eat(String name) { System.out.println(name + "在捉杰瑞");//控制台输出:Tom在捉杰瑞 } }, tomName); } private static void useAnimal(Animal a, String name) { a.eat(name); } }
-
结果输出:Tom在捉杰瑞
-
-
方式二:Lambda表达式
- 完整代码:可以直接复制运行(注意修改类型:即将LambdaDemo1改成你创建类的名称)
public class LambdaDemo1 { public static void main(String[] args) { //给定一个动物的名称 String tomName = "Tom"; //这是Lambda表达式 useAnimal((String name) -> { System.out.println(name+ "在捉杰瑞");//Tom在捉杰瑞 },tomName); } private static void useAnimal(Animal a, String name) { a.eat(name); } } interface Animal { void eat(String name); }
- 结果输出:Tom在捉杰瑞
-
方式三:Lambda表达式改进
-
完整代码:可以直接复制运行(注意修改类型:即将LambdaDemo1改成你创建类的名称)
public class LambdaDemo1 { public static void main(String[] args) { //给定一个动物的名称 String tomName = "Tom"; //这是最简Lambda表达式 useAnimal(name -> System.out.println(name+ "在捉杰瑞"),tomName);//Tom在捉杰瑞 } private static void useAnimal(Animal a, String name) { a.eat(name); } } interface Animal { void eat(String name); }
-
结果输出:Tom在捉杰瑞
-
3.分析
- 匿名内部类
- Lambda表达式
- Lambda表达式改进
4.总结
- 匿名内部类。 优点:可读性高;缺点:代码量多
- Lambda表达式。优点:代码量少;缺点:可读性低