Lamda表达式

Lamda表达式

  • Lamda表达式

    • λ 希腊字母表中排序第十一位的字母 ,英文名字为Lambda
    • 避免匿名类定义太多
    • 其实质属于函数式编程的概念
(params)-> expression[表达式]
   (params)->statement [语句]
    (params)-> { statement }
a -> System.out.println("I like lambda");
  • 为什么要使用lambda表达式
    • 避免匿名内部类定义过多
    • 让代码看起来更简洁
    • 去除多余代码,留下核心逻辑
  • 理解Functioanal Interfance (函数式接口) 是学习Java8 lambda 表达式的关键所在
  • 函数式接口的定义:

    • 任何接口,如果包含唯一一个抽象方法,那么就成为一个函数式接口
public interfance Runnable{
    public abstract void run();
}
    • 对于函数式接口,我们可以通过lambda 表达式来创建该接口的对象
/*
   推导 Lambda 公式
   */
public class TestLamda01 {
    //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简化  JDK 8 可用
      	like = ()->{
            System.out.println("i like lambda4");
        };
        like.lambda();
    }

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

//2.实现类
class Like implements ILike {
    @Override
    public void lambda() {
        System.out.println("i like lambda");
    }
}
public class TestLamda02 {
    //静态内部类
   /* static class Demo implements Istudy{
        @Override
        public void study(String name) {
            System.out.println(name+"要学习!");
        }
    }*/
    public static void main(String[] args) {
        //局部内部类
        /*class Demo implements Istudy{
            @Override
            public void study(String name) {
                System.out.println(name+"要学习!");
            }
        }*/

        //匿名内部类
        /*Istudy istudy = new Istudy() {
            @Override
            public void study(String name) {
                System.out.println(name+"要学习!");
            }
        };*/
        //4.Lambda类
        /*Istudy istudy = (String name) ->{
                System.out.println(name+"要学习!");
        };*/
        istudy.study("小明");
    }

}

interface Istudy {
    void study(String name);
}

//类
/*
class Demo implements Istudy{
    @Override
    public void study(String name) {
        System.out.println(name+"要学习!");
    }
}*/
  • Lambda 表达式再简化:

    • 简化1:去掉参数类型

      love = (int a)->{...}
      >>>love = (a)->{...}
      
    • 简化2:去掉括号

      >>>love = a ->{...}
      
    • 简化3:去掉花括号

      >>>love = a -> ...
      
    • 多个参数情况

      >>>love = (a,b,c) -> ...
      

注意:

  • lambda表示只能有一行代码的情况下才能简化成一行,若有多行必须用大括号括起来
  • 前提是接口是函数式接口
  • 若方法中含有参数,可以去掉参数类型,若含有多个参数,也可以去掉参数类型,要去掉都去掉,而且必须加上括号。
posted @ 2021-04-25 09:50  saxon宋  阅读(146)  评论(0)    收藏  举报