从匿名内部类到Lambda表达式:Java编程的优雅进化

匿名内部类

首先我们先来介绍一下什么是匿名内部类

匿名内部类:java中一种特殊的类定义方式,它允许你在需要实现一个接口或继承一个类的地方直接定义一个该接口或类的匿名子类。若想创建一个派生类的对象,并且对象只创建一次,可以设计为匿名内部类,可以大 大简化代码

注意:匿名内部类中不能修改外面局部变量的值

问:内部类有独立的.class吗?

答:有

让我们一起看看代码实例 

package ooday04;public class AnonInnerClassDemo {public static void main(String[] args) {//1)创建了Inter的一个派生类,但是没有名字//2)为该派生类创建了一个对象,名为o1,向上造型为Inter类型//  ----new Inter(){};是在创建Inter的派生类的对象//3)大括号中的为派生类的类体Inter o1 = new Inter(){};//1)创建了Inter的一个派生类,但是没有名字//2)为该派生类创建了一个对象,名为o2,向上造型为Inter类型//3)大括号中的为派生类的类体Inter o2 = new Inter(){};int num = 5;num = 6;//1)创建了InterInter的一个派生类,但是没有名字//2)为该派生类创建了一个对象,名为o3,向上造型为InterInter类型//3)大括号中的为派生类的类体InterInter o3 = new InterInter(){public void show(){System.out.println("showshow");//num = 55; //编译错误,匿名内部类中不能修改外面局部变量的值//因为该变量在此处会默认为final的}};o3.show();}}interface InterInter{void show();}interface Inter{}

 让我们再一起看看具体的实践

        List<String> list1 = new ArrayList<>();list1.add("你好啊");list1.add("哇你好( •̀ ω •́ )");list1.add("你好");Collections.sort(list1, new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {return o1.length() - o2.length();}});System.out.println(list1);

那么是不是感觉还是就算简化了类的创建还是很麻烦,不够清晰明了,这就可以介绍今天的主角了Lambda表达式了

Lambda表达式 

Lambda表达式是Java 8及更高版本中引入的一个特性,它提供了一种简洁的方式来表示匿名方法。Lambda表达式允许你以更直观、更简洁的方式编写代码,特别是在处理集合、事件监听或任何需要传递函数作为参数的场景中。

语法规则

Lambda表达式的基本语法由三部分组成:参数列表、箭头(->)和Lambda体(即方法体)。

(参数列表)->{
 方法体
 }

代码实例 

在了解基本语法后我们来看看具体的实现 接下来是匿名内部类写法和lambda表达式写法的对比

        //自定义比较器的匿名内部类写法Comparator<String> c1 = new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {return o2.length() - o1.length();}};
        //使用lambda表达式//lambda表达式就是省去了匿名内部类创建是接口与方法名部分Comparator<String> c2 = (String o1, String o2) -> {return o2.length() - o1.length();};

是不是简洁了许多,但是别急还能更加的简洁

        //lambda表达式可以忽略参数的类型//如果方法中只有一句代码时,该方法体的“{}”可以忽略不写//如果这句代码含有return关键字时,也要一起忽略returnComparator<String> c3 = (String o1, String o2) -> o2.length() - o1.length();

 接下来再介绍一个基于lambda表达式遍历集合元素

forEach 

JDK8之后,java在集合Collection接口中添加了一个用于遍历集合元素的forEach

        Collection<String> c = new ArrayList<>();c.add("one");c.add("two");c.add("three");c.add("four");for (String e : c) {System.out.println(e);}//tips:当lambda中只有一个参数时,参数列表的"()"可以忽略不写c.forEach(e->System.out.println(e));/*JDK8中出现的lambda表达式的变种写法:方法引用对象::方法当lambda表达式的参数与方法体中调用方法的参数一致时例如:(e)->System.out.println(e);那么就可以写作:System.out::println;对象::方法现在以了解为主即可*/c.forEach(System.out::println);
 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/52384.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务事务管理

1.分布式事务问题 1.1.本地事务 本地事务&#xff0c;也就是传统的单机事务&#xff0c;在传统数据库事务中&#xff0c;必须要满⾜四个原则&#xff1a; 1.2.分布式事务 分布式事务&#xff0c;就是指不是在单个服务或单个数据库架构下&#xff0c;产⽣的事务&#xff0c;例…

【Leetcode 1941 】 检查是否所有字符出现次数相同 —— 数组模拟哈希表

给你一个字符串 s &#xff0c;如果 s 是一个 好 字符串&#xff0c;请你返回 true &#xff0c;否则请返回 false 。 如果 s 中出现过的 所有 字符的出现次数 相同 &#xff0c;那么我们称字符串 s 是 好 字符串。 示例 1&#xff1a; 输入&#xff1a;s "abacbc"…

全感知、全覆盖、全智能的名厨亮灶开源了

简介 AI视频监控平台, 是一款功能强大且简单易用的实时算法视频监控系统。愿景在最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;减少企业级应用约 95%的开发成本&#xff0c;在强大视频算法加…

在Logback中配置`requestId`进行日志追踪的实践与应用

在Logback中配置requestId进行日志追踪的实践与应用 1. 引言 在分布式系统和微服务架构中&#xff0c;日志是调试、监控和性能分析的关键工具。然而&#xff0c;由于多个请求会在系统中并行处理&#xff0c;日志记录很容易变得杂乱无章&#xff0c;难以区分属于同一请求的日志…

数学基础(七)

一、熵 熵代表物体内部的混乱程度。&#xff08;一件事发生的不确定性&#xff09; 熵应用到分类任务中 二、激活函数 Sigmoid函数&#xff1a; Tanh函数&#xff1a; Relu函数&#xff1a; 三、回归分析 回归分析是寻找存在相关关系的变量间的数学表达式&#xff0c;并进行…

代码随想录算法训练营第57天|prim算法精讲、kruskal算法精讲

打卡Day57 1.prim算法精讲2.kruskal算法精讲 1.prim算法精讲 题目链接&#xff1a;prim算法精讲 文档讲解&#xff1a; 代码随想录 最小生成树是所有节点的最小连通子图&#xff0c;以最小的成本将图中所有节点连接到一起。prim算法是从节点的角度&#xff0c;采用贪心的策略…

[数据集][目标检测]电力场景输电线异物检测数据集VOC+YOLO格式2060张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2060 标注数量(xml文件个数)&#xff1a;2060 标注数量(txt文件个数)&#xff1a;2060 标注…

Spring Data JPA 中分页Pageable 的使用说明

我 | 在这里 ⭐ 全栈开发攻城狮、全网10W粉丝、2022博客之星后端领域Top1、专家博主。 &#x1f393;擅长 指导毕设 | 论文指导 | 系统开发 | 毕业答辩 | 系统讲解等。已指导60位同学顺利毕业 ✈️个人公众号&#xff1a;热爱技术的小郑。回复 Java全套视频教程 或 前端全套视频…

Android 12中读写SD卡,提示Operation not permitted问题处理

1、问题原因&#xff1a; 安卓11开始,强化了对SD卡读写的管理&#xff0c;引入了MANAGE_EXTERNAL_STORAGE权限&#xff0c;而之前的WRITE_EXTERNAL_STORAGE已经失效了。 并且MANAGE_EXTERNAL_STORAGE权限只能跳转设置页面申请。 2、解决方案 1、添加 <uses-permission an…

黑神话悟空什么配置可以玩?什么样的游戏本配置可以畅玩《黑神话:悟空》?黑神话悟空电脑配置推荐

相信不少游戏爱好者&#xff0c;近期被《黑神话&#xff1a;悟空》这款游戏刷屏了&#xff0c;预售开启不到5分钟&#xff0c;所有的产品即宣告售罄&#xff0c;预购3天销售额就破亿&#xff0c;并迅速登顶Steam全球榜。作为一款备受期待的国产3A游戏&#xff0c;以其精美的画面…

致远OA OCR票据识别组件

OCR票据识别 技术支持 技术大佬支持本文档 使用范围 任何票种信息&#xff0c;只要需要对接到oa底表中&#xff0c;就能够实现各种票种&#xff0c;各种字段的对接&#xff0c;包括票据识别&#xff0c;发票核验&#xff0c;适配各种票据 使用介绍 1 配置每种发票的ocr设…

【html+css 绚丽Loading】000016 四维玄方

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽Loading&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495…

《牛虻》读后感

《牛虻》这本书是同事送的&#xff0c;最近换工作、搬家很多杂事&#xff0c;也就没有多少看书的兴致&#xff0c;所以断断续续看了快两周才看完。这是爱尔兰女作家埃塞尔丽莲伏尼契的代表作&#xff0c;在我国声名远播&#xff0c;是一代人的精神食粮。怀着崇敬的心情翻开这本…

数模小白国赛获奖技巧

一、团队分工合作的技巧&#xff08;三角形配合&#xff09; &#xff08;1&#xff09;队长要组织多沟通多交流&#xff1b; &#xff08;2&#xff09;建议定期开组会&#xff0c;互相讲授自己学习的东西&#xff0c;一人学习&#xff0c;三人收获。 二、AI辅助思路解析&am…

STM32——GPS模块(GY-NEO-6M)

1连接 1-1 使用 USB-TTL 工具&#xff0c;安装好驱动&#xff0c;可以在”设备管理器看到对应COM”按照如下链接测试模块&#xff1a; USB-TTL GPS 模块 3.3V--------------------------------->VCC GND------------------------------>GND RXD--------------------…

如何规避DDoS攻击带来的风险?服务器DDoS防御软件科普

DDoS攻击是目前最常见的网络攻击方式之一。其见效快、成本低的特点&#xff0c;使它深受不法分子的“喜爱”。对于未受保护的企业来说&#xff0c;每次DDoS攻击的平均成本为20万美元&#xff0c;当DDoS攻击汹涌而至&#xff0c;缺失详细的保护预案&#xff0c;企业很可能会陷入…

老师是怎么分班的?用什么工具比较好?

新学期伊始&#xff0c;校园里充满了生机与活力&#xff0c;但对老师们来说&#xff0c;这同样意味着一段忙碌的开始。他们不仅要处理日常的教学准备&#xff0c;还要面临一项看似简单却颇为繁琐的任务——给新生进行分班。分班完成后&#xff0c;老师们还需要将分班结果及时、…

大模型预训练中的数据处理及思考

大模型预训练需要从海量的文本数据中学习到充分的知识存储在其模型参数中。预训练所用的数据可以分为两类。一类是网页数据&#xff08;web data&#xff09;&#xff0c;这类数据的获取最为方便&#xff0c;各个数据相关的公司比如百度、谷歌等每天都会爬取大量的网页存储起来…

@PathVariable:Spring MVC中的路径变量解析

在Spring MVC中&#xff0c;PathVariable注解是一个非常重要的特性&#xff0c;它允许开发者将URL中的一部分作为参数传递给控制器&#xff08;Controller&#xff09;的方法。这种机制在处理RESTful风格的API时尤为有用&#xff0c;因为它使得URL更加简洁且富有表达力。本文将…

LLaVA 简介

好奇这张照片是在哪里拍摄的&#xff1f;问 LLaVA&#xff01;&#xff08;图片来自Pixabay的Guy Rey-Bellet&#xff09;。 LLaVA&#xff08;L arge L anguage 和V isual A ssistant 的缩写&#xff09;是一种很有前途的开源生成式人工智能模型&#xff0c;它复制了 OpenAI …