当前位置: 首页 > news >正文

从匿名内部类到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);
 

 

 

 

 

 

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Challenge——spfa
  • 文件IO和多路复用IO
  • Flink入门(五)--Flink算子
  • 【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第六篇 嵌入式GUI开发篇-第八十三章 Qt基础
  • Windows系统电脑安装多个Tomcat服务教程
  • 2021年高教社杯国赛a题 详细代码 文章 教学 2024数学建模国赛数模备赛: “FAST”主动反射面的形状调节
  • Android 自适应屏幕技术
  • SpringBootWeb 篇-深入了解 SpringBoot + Vue 的前后端分离项目部署上线与 Nginx 配置文件结构
  • HTML简单了解和基础知识记录
  • 高可用IP地址管理:使用Keepalived和Nginx实现VIP及IP池配置
  • kaggle竞赛宝典 | 量化竞赛第一名的网络模型
  • 【系统架构设计师】论文:论软件开发平台的选择与应用
  • NPJ系列|放射组学与多组学数据整合:推进精准肿瘤学的新模式|文献速递·24-08-25
  • 虚幻5|制作一个木桩,含血量及伤害数字
  • python代码错误集合
  • $translatePartialLoader加载失败及解决方式
  • .pyc 想到的一些问题
  • “大数据应用场景”之隔壁老王(连载四)
  • Docker 笔记(2):Dockerfile
  • ES6系列(二)变量的解构赋值
  • Git 使用集
  • k个最大的数及变种小结
  • Rancher如何对接Ceph-RBD块存储
  • 闭包--闭包之tab栏切换(四)
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 今年的LC3大会没了?
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 实现简单的正则表达式引擎
  • 数据科学 第 3 章 11 字符串处理
  • 算法---两个栈实现一个队列
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 协程
  • 用mpvue开发微信小程序
  • raise 与 raise ... from 的区别
  • RDS-Mysql 物理备份恢复到本地数据库上
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • ​linux启动进程的方式
  • ​ubuntu下安装kvm虚拟机
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #14vue3生成表单并跳转到外部地址的方式
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #知识分享#笔记#学习方法
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (2)nginx 安装、启停
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (pytorch进阶之路)扩散概率模型
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (剑指Offer)面试题34:丑数
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (新)网络工程师考点串讲与真题详解
  • (转)shell调试方法
  • (转)可以带来幸福的一本书