文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何理解Java中的lambda表达式

2023-06-30 18:23

关注

这篇文章主要介绍了如何理解Java中的lambda表达式的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何理解Java中的lambda表达式文章都会有所收获,下面我们一起来看看吧。

如何理解Java中的lambda表达式

Lambda概述

Lambda表达式是JDK8开始后的一种新语法形式

作用:简化匿名内部类的代码写法

格式:

(匿名内部类被重写方法的形参列表)->{    被重写方法的方法体代码}注:->是语法形式,无实际意义

首先我们先定义一个抽象类,通过匿名内部类重写其方法,再对其进行简化,比较二者之间有何变化:

使用Lambda表达式之前:

public static void main (String[] args){    People p = new People(){    @Override    public void run(){        System.out.println("小学生跑的很慢");        }    };    p.run();    }abstract class People{    public abstract void run();}

使用Lambda表达式之后:

People p = ()->{    System.out.println("小学生跑的很慢");};//会出现报错

会出现报错,这是为什么呢?原因在于前面对于Lambda表达式的定义并不清晰,Lambda表达式并不能简化所有匿名内部类,其只能简化函数式接口匿名内部类的写法形式,且接口中有且仅有一个抽象方法,通常,我们会再接口上加上一个@Functionalinterface注解,标记该接口必须是满足函数式接口。

真正意义上通过Lambda表达式简化:

@FunctionalInterface//加上这个注解必须是函数式接口,且只有一个抽象方法interface People{    void run();}//简化之前的匿名内部类People p = new People(){    @Override    public void run(){        System.out.println("小学生跑的很慢!");    }};//简化之后People p = () -> {        System.out.println("小学生跑的很慢!");};

另外,也可以将其作为参数代入方法中去使用:

//在原来的基础上定义一个pk方法public static void pk(People p){    System.out.println("跑步情况如何:")    p.run();}//不使用Lambda的情况下:pk(p);//需要在定义匿名内部类之后,将p代入;//使用Lambda的情况:People p = () -> {        System.out.println("小学生跑的很慢!");};pk(() -> {        System.out.println("小学生跑的很慢!");});//由于等号右边即是People创建的对象p,因此可以可以直接将其代入

Lambda的好处:

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

Lambda实战的作用

在之前的学习过程中,我们学习过了Arrays的相关知识,其中有一个sort方法(可以将数组升序或降序排列),它其实也是接口类,并且只有一个抽象方法:

//精简之前:Arrays.sort(grade,new Comparator<Integer>(){    @Override    public int compare(Integer o1,Integer o2){        return o2 -o1;}});//精简之后:Arrays.sort(grade,(Integer o1,Integer o2) -> {        return o2 -o1;});

Lambda表达式省略规则

  • 参数类型可以省略不写

//参考前面的实战例子Arrays.sort(grade,(Integer o1,Integer o2) -> {        return o2 -o1;});//省略参数类型之后Arrays.sort(grade,( o1, o2){        return o2 -o1;});
  • 如果只有一个参数,参数类型可以省略,同时()也可以省略

//简单引用一个单个参数的例子,不需要了解其具体含义btn.addActionListener((ActionEvent e) -> {    System.out.println("我是简单的例子。");});//简化之后:btn.addActionListener( e -> {    System.out.println("我是简单的例子。");});
  • 如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写,同时要省略分号

//参照上一条规则的例子btn.addActionListener( e -> {    System.out.println("我是简单的例子。");});//简化之后:btn.addActionListener( e -> System.out.println("我是简单的例子。") );
  • 如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写。此时,如果这行代码是return语句,必须省略return不写,同时也必须省略";"不写

//参照第一条规则的代码Arrays.sort(grade,(Integer o1,Integer o2) -> {        return o2 -o1;});//简化之后:Arrays.sort(grade,( o1, o2)-> o2 -o1);

关于“如何理解Java中的lambda表达式”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“如何理解Java中的lambda表达式”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯