JDK新特性之lambda

本文详细介绍了Java中的Lambda表达式和匿名内部类,展示了它们在简化代码和实现函数式编程中的作用。Lambda表达式要求函数接口只有一个抽象方法,使得代码更加简洁。通过实例,演示了Lambda如何替代匿名内部类,并比较了两者的区别,包括所需类型、抽象方法数量以及实现原理。最后,展示了Lambda在集合操作如forEach中的应用。
摘要由CSDN通过智能技术生成

Lambda表达式

Lambda好处:简化内部类的使用。

public static void main(String[] args) {
        new OrderService() {
            @Override
            public void get() {
                System.out.println("get");
            }
        }.get();
    }
------------------
public static void main(String[] args) {
        ((OrderService) () -> System.out.println("get")).get();
    }   

调用接口使用匿名内部类重写方法
Lambda表达式需要函数接口的支持

函数接口定义:

1.在接口中只能有一个抽象方法

2.能够定义Object类中的方法

3.能够通过default修饰普通方法

4.@FunctionalInterface 标记为该接口为函数接口

标准格式
(参数类型 参数名称) -> { 代码体; }

//(参数类型 参数名称):参数列表
//{代码体;}:方法体
//-> :箭头,分隔参数列表和方法体
无参方法的时候lambda表达式
OrderService orderService = () -> {
            System.out.println("使用lambda");
        };
        orderService.get();
参数方法的
public static void main(String[] args) {
        OrderService2 orderService2 = (i, j) -> {
            return i + "------" + j;
        };
        System.out.println(orderService2.get(7, 9));

    }
精简版
public static void main(String[] args) {
        OrderService2 orderService2 = (i, j) -> {
            return i + "------" + j;
        };
        System.out.println(orderService2.get(7, 9));
    
    	//使用Lambda方法体中只有一条语句的情况下,在这时候我们不需要写(也可以不需要写return
    	String s = ((OrderService2) (i, j) -> i + "-----" + j).get(7, 7);
        System.out.println(s);

    }
实战案例
public static void main(String[] args) {
        ArrayList<String> arrayList = new ArrayList<>();
        arrayList.add("suran");
        arrayList.add("xiaoguo");

        arrayList.forEach((s)->{System.out.println(s);});
    }
Lambda和匿名内部类使用上的区别

(1) 所需的类型不一样

​ 匿名内部类,需要的类型可以是类,抽象类,接口

​ Lambda表达式,需要的类型必须是接口

(2)抽象方法的数量不一样

​ 匿名内部类所需的接口中抽象方法的数量随意

​ Lambda表达式所需的接口只能有一个抽象方法

(3)实现原理不同

​ 匿名内部类是在编译后会形成class

​ Lambda表达式是在程序运行的时候动态生成class

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值