Java8新特性------Lambda表达式

Lambda表达式是一种匿名函数,允许将代码作为数据处理。Java8引入Lambda,使得代码更简洁。文中通过示例展示了Lambda的使用,包括无参、单参、多参的情况,以及如何省略参数类型和括号。Lambda表达式本质上是接口的实例,实现了方法的定义。
摘要由CSDN通过智能技术生成

Lambda表达式

为什么要使用Lambda表达式

Lambda是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。

Lambda表达式示例

示例一

@Test
public void test1() {
	//匿名内部类
    Runnable r1 = new Runnable() {
        @Override
        public void run() {
            System.out.println("面对疾风吧!!!");
        }
    };
    r1.run();

    System.out.println("----------Lambda表达式写法----------");
    //Lambda表达式
    Runnable r2 = () -> {
        System.out.println("落叶一生难道只为归根吗???");
    };
    r2.run();
}

运行结果
在这里插入图片描述

示例二

@Test
public void test2() {
	//原来使用匿名内部类作为参数传递
    Comparator<Integer> comparator1 = new Comparator<Integer>() {
        @Override
        public int compare(Integer o1, Integer o2) {
            return Integer.compare(o1, o2);
        }
    };

    System.out.println(comparator1.compare(12, 21));

    System.out.println("----------Lambda表达式写法----------");
	//使用Lambda表达式作为参数传递
    Comparator<Integer> comparator2 = (o1, o2) -> {
            return Integer.compare(o1, o2);
    };

    System.out.println(comparator2.compare(21, 12));

}

运行结果
在这里插入图片描述

Lambda表达式语法

Lambda 表达式: 在Java 8 语言中引入的一种新的语法元素和操作符。这个操作符为 “ -> ” , 该操作符被称为 Lambda 操作符箭头操作符。它将Lambda 分为两个部分:
左侧: 指定了 Lambda 表达式需要的参数列表
右侧: 指定了Lambda体, 是抽象方法的实现逻辑,也即Lambda 表达式要执行的功能。

语法格式一: 无参,无返回值

@Test
public void test01() {
    Runnable r1 = new Runnable() {
        @Override
        public void run() {
            System.out.println("干嚼咖啡不加糖");
        }
    };
    r1.run();

    System.out.println("----------Lambda表达式写法----------");

    Runnable r2 = () -> {
        System.out.println("我是建工高启强");
    };
    r2.run();
}

运行结果:
在这里插入图片描述

语法格式二: Lambda 需要一个参数,但是没有返回值。

@Test
public void test02() {
    Consumer<String> con1 = new Consumer<String>(){
        @Override
        public void accept(String s) {
            System.out.println(s);
        }
    };
    con1.accept("走时把那电视给我砸了");

    System.out.println("----------Lambda表达式写法----------");
    Consumer<String> con2 = (String s) -> {
        System.out.println(s);
    };
    con2.accept("什么档次跟我用的一样");
}

运行结果:
在这里插入图片描述
语法格式三: 数据类型可以省略, 因为可由编译器推断得出,称为“类型推断”

@Test
public void test03() {
     Consumer<String> con2 = (String s) -> {
         System.out.println(s);
     };
     con2.accept("什么档次跟我用的一样");

     System.out.println("----------Lambda表达式类型推断------------");
     Consumer<String> con3 = (s) -> {
         System.out.println(s);
     };
     con2.accept("什么档次跟我用的一样");
}

运行结果:
在这里插入图片描述
语法格式四: Lambda 若只需要一个参数时, 参数的小括号可以省略

@Test
public void test04() {
    Consumer<String> con1 = (s) -> {
        System.out.println(s);
    };
    con1.accept("告诉老默,我想吃鱼了!");

    System.out.println("----------Lambda表达式省略小括号----------");
    Consumer<String> con2 = s -> {
        System.out.println(s);
    };
    con2.accept("告诉老默,我想吃鱼了!");
}

运行结果
在这里插入图片描述
语法格式五: Lambda 需要两个或以上的参数,多条执行语句,并且可以有返回值

@Test
public void test05() {
    Comparator<Integer> com1 = new Comparator<Integer>() {
        @Override
        public int compare(Integer o1, Integer o2) {
            System.out.println(o1);
            System.out.println(o2);
            return Integer.compare(o1, o2);
        }
    };
    System.out.println(com1.compare(12, 21));

    System.out.println("----------Lambda语法格式五----------");

    Comparator<Integer> com2 = (o1, o2) -> {
        System.out.println(o1);
        System.out.println(o2);
        return Integer.compare(o1, o2);
    };
    System.out.println(com2.compare(21,12));
}

运行结果:
在这里插入图片描述
语法格式六: 当 Lambda 体只有一条语句时return 与大括号若有,都可以省略

@Test
public void test06() {
    Comparator<Integer> com1 = new Comparator<Integer>() {
        @Override
        public int compare(Integer o1, Integer o2) {
            return Integer.compare(o1, o2);
        }
    };
    System.out.println(com1.compare(12, 21));
    System.out.println("----------语法格式六----------");

    Comparator<Integer> com2 = (o1, o2) -> Integer.compare(o1, o2);
    System.out.println(com2.compare(21, 12));
}

运行结果:
在这里插入图片描述

Lambda表达体本质

Lambda表达体本质是作为接口的实例,也就是说是一个对象
在这里插入图片描述

总结

Lambda表达式左边: Lambda形参列表的参数类型可以省略(类型推断); 如果形参列表只有一个参数,可以省略其小括号。
Lambda表达式右边: Lambda体应该在{}中;如果Lambda体只有一条执行语句(也可能是return语句),此时可以省略{}return关键字

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WYSCODER

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值