Java中的lambda表达式如何理解——精简

Java中的lambda表达式如何理解——精简在写之前 我在考虑是否要写这篇文章 然而当我查阅 lambda 表达式 的相关内容的时候 我发现大量的文章都出现了冗余的现象 文章的篇幅过于夸张 严重影响了大家阅读的兴趣 因此我决定写一篇关于 lambda 表达式的文章 让大家能够在一定程度上对 lambda 表达式有一定的理解 希望能够对你在 Java 的学习中起到一定的帮助

✌️✌️✌️在写之前,我在考虑是否要写这篇文章,然而当我查阅“lambda表达式”的相关内容的时候,我发现大量的文章都出现了冗余的现象,文章的篇幅过于夸张,严重影响了大家阅读的兴趣,因此我决定写一篇关于lambda表达式的文章,让大家能够在一定程度上对lambda表达式有一定的理解。希望能够对你在Java的学习中起到一定的帮助。

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注解,标记该接口必须是满足函数式接口。

Java中的lambda表达式如何理解——精简

真正意义上通过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语言表达能力得到了提升。

Java中的lambda表达式如何理解——精简

Lambda实战的作用 

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

//精简之前: Arrays.sort(grade,new Comparator 
   
     (){ @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表达式如何理解——精简

创作不易,给个三连 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220199.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午9:00
下一篇 2026年3月17日 下午9:00


相关推荐

  • ActionContext_javacontext模式

    ActionContext_javacontext模式ActionContextActionContext是Action的上下文,Struts2自动在其中保存了一些在Action执行过程中所需的对象,比如session,parameters,locale等。Struts2会根据每个执行HTTP请求的线程来创建对应的ActionContext,即一个线程有一个唯一的ActionContext。因此,使用者可以使用静态方法ActionContext….

    2025年10月17日
    5
  • pytest指定用例_文件夹排列顺序自定义

    pytest指定用例_文件夹排列顺序自定义前言测试用例在设计的时候,我们一般要求不要有先后顺序,用例是可以打乱了执行的,这样才能达到测试的效果.有些同学在写用例的时候,用例写了先后顺序,有先后顺序后,后面还会有新的问题(如:上个用例返回

    2022年7月30日
    7
  • 【转载】7个最佳的双因素认证解决方案

    【转载】7个最佳的双因素认证解决方案7 个最佳的双因素认证解决方案本文中 我们将介绍由知名双因素认证服务提供商提供的 7 种最适合的数据保护工具 访问网络帐户的标准程序包括输入登录详细信息 登录名和密码 这是一个单因素身份验证 双因素身份验证 2FA 是一种额外的数据保护措施 这意味着需要额外的步骤才能进行常规登录过程 与单一因素不同 身份验证要求用户输入密码并登录 他们知道的 来访问数据 2FA 可能需要输入在个人移动设备 用户所拥有

    2026年3月18日
    2
  • Idea激活码永久有效Idea2021.3.1激活码教程-持续更新,一步到位

    Idea激活码永久有效Idea2021.3.1激活码教程-持续更新,一步到位Idea激活码永久有效2021.3.1激活码教程-Windows版永久激活-持续更新,Idea激活码2021.3.1成功激活

    2022年6月17日
    125
  • oj在计算机领域中指什么,【计算机专业论文】计算机专业教学中OJ平台的应用(共2762字)…

    oj在计算机领域中指什么,【计算机专业论文】计算机专业教学中OJ平台的应用(共2762字)…摘要:传统的教学模式对计算机专业学生的能力培养存在着诸多问题,而OJ(OnlineJudge在线检测程序源代码)平台为计算机教学提供了新的思路,因为OJ平台在学生日常训练方面有一套行之有效的机制,所以对学生的学习兴趣、分析解决问题能力、创新能力等方面的培养都起到了积极的推动作用,OJ平台还可以对学生实践能力进行最直接的考核,因此将OJ平台引入计算机专业教学,可实现以平台促教学,以平台促教改。关键词…

    2022年6月16日
    32
  • 字节对齐的规则总结

    字节对齐的规则总结一 什么是字节对齐 为什么要对齐 现代计算机中内存空间都是按照 byte 划分的 从理论上讲似乎对任何类型的变量的访问可以从任何地址开始 但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问 这就需要各种类型数据按照一定的规则在空间上排列 而不是顺序的一个接一个的排放 这就是对齐 对齐的作用和原因 各个硬件平台对存储空间的处理上有很大的不同 一些平台对某些特定类型的数据只能从某些特定地址开始

    2026年3月18日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号