Lambda表达式


Lamda表达式

为什么要使用lamba表达式

  • $ \lambda$希腊字母表中排序第十一位的字母,英语名称为Lamda

  • 避免匿部内部类定义过多

  • 其实质属于函数式编程的概念

理解Functional Interface(函数式接口)是学习Java8 lambda表达式的关键所在。

函数式接口的定义:

  • 任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口

  • 对于函数式接口,我们可以通过lambda表达式来创建接口的对象。

    @FunctionalInterface
    public interface Runnable {
        public abstract void run();
    }
    

    @FunctionalInterface 注解标识是一个函数式接口,Runnable和Callable就是一个典型的函数式接口。

    外部类-->静态类-->局部内部类-->匿名内部类-->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();
    }

Lamda表达式简化

//		1、lambda表示简化
//        ILove love=(int a)->{
//            System.out.println("i love you 1-->"+a);
//        };
//        //简化1.参数类型
//        love =(a)->{
//                System.out.println("i love you 2-->"+a);
//        };
//        //简化2.简化括号
//        love=a -> {
//            System.out.println("i love you 3-->"+a);
//        };
        //简化3.去掉花括号(假如只有一行才可以)
        love=a -> System.out.println("i love you 4-->"+a);

总结:

lambda表达式只能有一行代码情况下才能简化成为一行,如果有多行,那么就用代码块包裹
前提是接口为函数式接口(只能有一个方法)
多个参数也可以同样去掉参数类型,要去掉就都去掉,且各参数必须加上括号。

相关