JDK8学习笔记(一)初识lambda表达式

       这几天又学习了一遍关于jdk8中lambda表达式,以前也看过一遍,由于没怎么用过,只是看别人代码时用过lambda,也没有做笔记,时间一长就忘的差不多了。为了吸取教训,这次看了后,做下笔记,供以后参考学习。

    jdk8中加入了两大技术,一是lambda表达式,二是加入到stream流。

一、基本概念

为了方便学习理解,先了解些基本概念

lambda表达式概念:lambda表达式是 一种匿名函数, lambda表达式有参数列表,函数主体、返回值类型,还可能有异常列表。

     个人理解就是,lambda表达式就是比匿名类写法更简单的一种写法,也就是匿名类都可以改成lambda表达式写法,前提是匿名类必须是函数式接口。lambda表达式就是函数式接口中抽象方法的另一种描述。

lambda表达式格式:(parameters) -> expression  或者   (parameters) -> { statements; } 

                                 例子:      (Apple a) -> a.getColor();

                                                 (Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight()); 

                            

函数式接口:只定义一个抽象方法的接口。

                     在jdk8中提供了好多函数式接口,这样的接口都用一个注解@FunctionalInterface标注

 

在哪里可以使用lambda表达式呢?只能在函数式接口出现的地方使用lambda表达式。

 

 

二、具体例子

首先,有个函数式接口,代码如下:

public interface ApplePredicate{ 
    boolean test (Apple apple); 

其次,有个筛选苹果的方法,代码如下:

public static List<Apple> filterApples(List<Apple> inventory, 
                                       ApplePredicate p){ 
    List<Apple> result = new ArrayList<>(); 
    for(Apple apple: inventory){ 
        if(p.test(apple)){  
            result.add(apple); 
        } 
    } 
    return result; 
}  

然后,匿名类是这么写的:

List<Apple> redApples = filterApples(inventory, new ApplePredicate() { 
    public boolean test(Apple apple){ 
        return "red".equals(apple.getColor()); 
    } 
});  

最后,lambda表达式是比匿名类更简洁的一种写法,如下:

List<Apple> redApples = 
    filterApples(inventory, (Apple apple) -> "red".equals(apple.getColor()));  

这个看起来比匿名类的写法简洁多了,而且还更加易懂。

注意: filterApples方法的第二个参数是一个函数式接口ApplePredicate,所以这里可以使用lambda表达式。也就是有函数式接口的地方都可以替换为lambda表达式,在jdk8之前,都是用匿名类的写法,jdk8开始可以使用lambda表达式替代匿名类,写法更简洁易懂了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一路奔跑1314

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

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

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

打赏作者

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

抵扣说明:

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

余额充值