java8新特性-Lambda表达式

文章介绍了如何使用Java创建线程,强调了Runnable接口在创建线程中的作用以及如何通过匿名内部类和Lambda表达式简化代码。Lambda表达式适用于函数式接口,即只有一个抽象方法的接口,如Runnable和Consumer。文章展示了从匿名内部类到Lambda表达式的转换过程,并给出了Lambda表达式的省略规则。
摘要由CSDN通过智能技术生成

引出:

创建一个线程,可以使用如下代码

new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("我是一个线程");
    }
}).start();

在上面代码中,new Thread()中的参数是Runnable(接口)类型的,接口不能直接new,但是可以使用匿名内部类的形式(上面代码中的new Runnable(){}...就是匿名内部类的写法);

Lambda表达式可以简化匿名内部类,让代码更简单。

匿名内部类转换为Lambda表达式的条件:

Runnable是一个接口,并且此接口下只有一个抽象方法(这种接口就叫做函数式接口),如图

怎么判断一个接口里的方法是不是抽象方法 

接口里的方法有抽象方法和默认方法;其中,抽象方法不包含方法体并且不带修饰词default;

默认方法带有默认方法体并且由default修饰,这个接口的实现类可以不实现该方法也不会编译错误

比如Consumer类,红框的翻译是`这是一个函数式接口,它的抽象方法是accept`

Functional类也如此

满足上面圈出的两个条件,就可以把匿名内部类写法转换成Lambda表达式的写法,如下。

new Thread(() -> {
    System.out.println("我是一个线程");
}).start();

匿名内部类转换为Lambda表达式的方法:

匿名内部类转换成Lambda表达式的过程很简单,只需要关注匿名内部类中的方法参数和方法体;

上面匿名内部类的方法参数为空,即为();

方法体为System.out.println("我是一个线程");

只需要把方法参数和方法体保留,其余的部分删除,最后再在方法参数和方法体中间加上->就实现了匿名内部类转换成Lambda表达式写法。

例子:

List<String> list = Arrays.asList("Java", "Python", "Go", "C++");

list.forEach(new Consumer<String>() {
    @Override
    public void accept(String s) {
        System.out.println(s);
    }
});


//使用Lambda表达式的方式:
List<String> list = Arrays.asList("Java", "Python", "Go", "C++");
list.forEach((String s) -> {
    System.out.println(s);
});

//简写
list.forEach(s -> System.out.println(s));

Lambda表达式的省略规则:

左边
(1)形参列表类型可省
(2)形参只有一个时括号可省
右边
(1)只有一条执行语句,大括号、return关键字、分号可省(必须同时省略,这三个的话)

上面可以简写为

new Thread(() -> System.out.println("我是一个线程")).start();

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值