Java多线程详解(三)由繁入简推导Lambda表达式

为什么要使用Lambda表达式?

    避免匿名内部类定义过多 可以让你的代码看起来很简洁 去掉了一堆没有意义的代码,只留下核心的逻辑 理解Functional Interface(函数式接口)是学习Java8 lambda表达式的关键所在 函数式接口的定义 任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口 对于函数式接口,我们可以通过lambda表达式来创建接口的对象

Lambda表达式的推导(由繁入简,体会lambda表达式的魅力)

一、用普通类实现接口

package ThreadTest;

public class TestLambda {
          
   
    public static void main(String[] args) {
          
   
        ILike iLike = new Like();
        iLike.lambda();
    }
}

//定义一个函数式接口
interface ILike{
          
   
    void lambda();
}

//实现类
class Like implements ILike{
          
   

    @Override
    public void lambda() {
          
   
        System.out.println("I like Lambda!");
    }
}

二、静态内部类

package ThreadTest;

public class TestLambda {
          
   
    public static void main(String[] args) {
          
   
        ILike iLike = new Like();
        iLike.lambda();
    }

    //静态内部类
    static class Like implements ILike{
          
   

        @Override
        public void lambda() {
          
   
            System.out.println("I like Lambda!");
        }
    }
}

//定义一个函数式接口
interface ILike{
          
   
    void lambda();
}

三、局部内部类

package ThreadTest;

public class TestLambda {
          
   
    public static void main(String[] args) {
          
   

        //局部内部类
        class Like implements ILike{
          
   
            @Override
            public void lambda() {
          
   
                System.out.println("I like Lambda!");
            }
        }

        ILike iLike = new Like();
        iLike.lambda();
    }


}

//定义一个函数式接口
interface ILike{
          
   
    void lambda();
}

四、匿名内部类

package ThreadTest;

public class TestLambda {
          
   
    public static void main(String[] args) {
          
   
		//局部内部类,没有类的名称,必须借助接口或者父类
        ILike like = new ILike() {
          
   
            @Override
            public void lambda() {
          
   
                System.out.println("I like Lambda!");
            }
        };

        like.lambda();
    }
}

//定义一个函数式接口
interface ILike{
          
   
    void lambda();
}

五、用lambda简化

package ThreadTest;

public class TestLambda {
          
   
    public static void main(String[] args) {
          
   
        //用lambda简化,只有一句代码的时候才能去掉花括号
        ILike like = ()->System.out.println("I like lambda!");
        
        like.lambda();
    }
}

//定义一个函数式接口
interface ILike{
          
   
    void lambda();
}

六、有参数的lambda表达式

package ThreadTest;

public class TestLambda {
          
   
    public static void main(String[] args) {
          
   
        //多个参数也可以去掉参数类型,要去掉就都去掉,必须加上括号,一个参数时可以不加
        ILike like = (a,b)-> System.out.println("a="+a+" b="+b);

        like.lambda(1,1.0);
    }
}

//定义一个函数式接口
interface ILike{
          
   
    void lambda(int a,double d);
}
经验分享 程序员 微信小程序 职场和发展