• 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html
  • 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html

Java8新特性之Lambda表达式

技术杂谈 勤劳的小蚂蚁 3个月前 (01-29) 63次浏览 已收录 0个评论 扫描二维码

Lambda表达式是Java8所引入的新特性之一,其基于函数式接口,以极大地减少代码冗余,并提高代码的可读性。

Lambda表达式的基本语法

参考答案:
Java8中引入箭头操作符(也叫Lambda操作符)将Lambda表达式拆分成左右两部分:
  • 左侧:指定Lambda表达式的参数列表;
  • 右侧:指定Lambda表达式所要执行的功能,即Lambda体。
// 1).无参数,无返回值
Runnable r1 = () -> System.out.println(“Hello Lambda!”);

// 2).有一个参数,无返回值(只有一个参数时,小括号可以省略)
Consumer<String> con = (x) -> System.out.println(x);
con.accept(“Hello Lambda!);

// 3).有两个及以上参数,有返回值,且Lambda体中有多条语句
Comparator<Integer> com = (x, y) -> {
    System.out.println(“函数式接口“);
    return Integer.compare(x, y);
};

// 若lambda体中仅有一条语句,大括号和return都可以省略

什么是函数式接口?

参考答案:
Lambda表达式需要函数式接口的支持。
仅包含一个抽象方法的接口,称为「函数式接口」。可以在接口上使用@FunctionalInterface注解来检查该接口是否为函数式接口。
注意:函数式接口是Lambda表达式可以使用的关键所在,若一个接口中包含多个抽象方法,是没有办法仅通过表达式左侧的参数列表来定位到对应的方法。

为什么要使用Lambda表达式?

仅对比下面的两个代码实现:
// 实现一
Comparator<String> com = new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        return Integer.compare(o1.length(), o2.length());
    }
};
TreeSet<String> ts = new TreeSet<>(com);

// 实现二:基于Lambda表达式
Comparator<String> com = (x, y) -> Integer.compare(x.length(), y.length());
TreeSet<String> ts = new TreeSet<>(com);
这两个代码都是实现的同一个功能,即创建带比较器的TreeSet集合,基于Lambda表达式的实现代码量少,可读性强。
备注:篇幅有限,此处仅给出一个对比,有兴趣可以再深入学习。

扩展面试题

问:参数列表中为什么可以省略参数类型?
Java8提供了「类型推断」机制。Java编译器可以根据上下文在后台推断出参数的类型,故无需在参数列表中指定参数类型。

丨极客文库, 版权所有丨如未注明 , 均为原创丨
本网站采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行授权
转载请注明原文链接:Java8新特性之Lambda表达式
喜欢 (0)
[247507792@qq.com]
分享 (0)
勤劳的小蚂蚁
关于作者:
温馨提示:本文来源于网络,转载文章皆标明了出处,如果您发现侵权文章,请及时向站长反馈删除。

您必须 登录 才能发表评论!

  • 精品技术教程
  • 编程资源分享
  • 问答交流社区
  • 极客文库知识库

客服QQ


QQ:2248886839


工作时间:09:00-23:00