1.避免匿名内部类过多 2.可以让你的代码看起来很简洁 3.去掉了一堆没有意义的代码,留下核心代码
任何接口,如果只包含一个抽象方法,那么它就是一个函数式接口
public interface Runnable{ public abstract void run(); }对于函数式接口,我们可以通过lambda表达式来创建该接口的对象。
举个小例子:
/** *推导lambda表达式 * **/ public class TestLambda1{ //3.静态内部类 static class Like2 implements ILike{ @Override public void lambda() { System.out.println("I like lambda2"); } } public static void main(String[] args){ ILike like = new Like(); like.lambda(); like = new Like2(); like.lambda(); //4.局部内部类 class Like3 implements ILike{ @Override public void lambda() { System.out.println("I like lambda3"); } } like = new Like3(); like.lambda(); //5.匿名内部类 like = new ILike() { @Override public void lambda() { System.out.println("I like lambda4"); } }; like.lambda(); //6.用lambda简化 like = ()->{ System.out.println("I like lambda5"); }; like.lambda(); } } //1.定义一个函数式接口 interface ILike{ void lambda(); } //2.实现类 class Like implements ILike{ @Override public void lambda() { System.out.println("I like lambda"); } }lambda的简化表达:
package com.kuang.lambda; public class TestLambda2 { public static void main(String[] args) { ILove love = new ILove(){ @Override public void love(int a) { System.out.println("I love you-->"+a); } }; //简化一:使用lambda表达式 love = (int a)->{ System.out.println("I love you-->"+a); }; //简化二:去掉 int love = (a)->{ System.out.println("I love you-->"+a); }; //简化三:去掉() love = a->{ System.out.println("I love you-->"+a); }; //简化四:去掉{} love = a -> System.out.println("I love you-->"+a); //总结: //lambda表达式只能有一行代码的情况下才能简化为一行,如果有多行则用户代码块包裹 //前提是接口为函数式接口 //多个参数也可以去掉参数类型,要去掉就都去掉,必须加括号 love.love(2); } } interface ILove{ void love(int a); }总结: lambda表达式只能有一行代码的情况下才能简化为一行,如果有多行则用户代码块包裹 前提是接口为函数式接口 多个参数也可以去掉参数类型,要去掉就都去掉,必须加括号