Lambda表达式

Lamda表达式

  • 希腊字母表排序第十一位,英文名称Lambda
  • 避免匿名内部类定义过多
  • 其实质属于函数式编程概念

(params) -> expression[表达式]

(params) -> statement[语句]

(params) -> {statements}

线程中的使用形式:

new Thread (() -> System.out.println("多线程学习")).start();

  • 理解Functional Interface(函数式接口) 是学习Java8 lambda表达式的关键所在
  • 函数式接口的定义:
    • 任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口
    • 对于函数式接口,我们可以通过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 Lambda1");
    }
}
//对lambda表达式再进行简化
public class TestLambda2 {
    public static void main(String[] args) {
        student stu = null;
        //原版
        /*student stu = (int a) -> {
            System.out.println("student" + a);
        };*/

        //简化1.去掉参数类型
        /*stu = (a) -> {
            System.out.println("student" + a);
        };*/

        //简化2.去掉括号
        /*stu = a -> {
            System.out.println("student" + a);
        };*/

        //简化3.去掉花括号
        stu = a -> System.out.println("student" + a);;
        stu.std(5);

        /*总结:
        lambda表达式只有一行代码的情况下才能简化成一行代码,否则必须加代码块
        前提是一定要是函数式接口
        多个参数也可以去掉参数类型,要去掉就全部去掉,同时加上括号
        * */

    }
}
interface student{
     void std(int a);
}
posted @   NeverGGp  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示