[Java][单列集合+数组遍历方法]通过Lambda表达式简化匿名内部类遍历数组学习体会

在分享本文之前,我们需要先了解两种思想——面向对象式编程与函数式编程思想

面向对象编程和函数式编程是两种不同的编程范式,它们的思想和实现方式有很大的差异。可以将它们比作两种不同的制作蛋糕的方式:

面向对象编程就像是在制作一个三层生日蛋糕,每一层都有自己的形状和特点,需要使用不同的工具和技巧来完成。比如需要用模具把蛋糕做成圆形,用刀子把蛋糕切成两半等等。在代码中,面向对象编程强调对象的封装、继承和多态,通过定义类和对象,让程序的结构更加清晰、易于维护和扩展。

而函数式编程则更像是在制作一个松饼,所有的材料都被混合在一起,然后放入烤箱中烘烤。在代码中,函数式编程强调函数的组合、高阶函数和纯函数,通过对函数的抽象和组合,来达到对程序行为的描述和控制。

总的来说,面向对象编程更注重对象之间的交互和过程的描述,而函数式编程则更注重函数之间的组合和数据的处理。两种编程范式各有优缺点,在不同的场景下可以选择不同的方式来实现。

你可以了解到,我们在Java中所运用的思想近乎全部属于面向对象式的编程思想。而Lambda表达式就一种可以简化面向对象思想中匿名内部类的一种表达方式

但是学习到这里,你可能会问:那么匿名内部类是什么东西呢?

我们知道,在实际开发中,有许多时候我们并不需要一个可以被全局调用的类,也不想为了实现一个临时的小功能重新写一个JavaBean或者是接口。这时候我们就会在某些代码块或是对象的参数中创建一个临时的对象,譬如Consumer 然后通过在这个接口中复写方法 实现一个简单的功能

譬如我们希望实现对集合的遍历

//1.创建集合并且添加元素Collection<String> coll = new ArrayList<>();coll.add("zhangsan");coll.add("lisi");coll.add("wangwu");//2.我们先用匿名内部类的形式进行遍历/*这里你可能会问?为什么要用匿名内部类呢?我想你可能忘记了 我们引入lambda表达式的原因我们正是因为匿名内部类这种写法过于冗杂 过于体现了不必要的<面向对象>式编程风格 因此提出了更高效 在既定区域更有用的<函数式编程>思想->也就是产生了lambda这种写法*/coll.forEach(new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}});

在这里,我们可以看到我们首先创建了一个Arraylist类型的集合coll,并且在coll集合中添加了一些元素,我们接下来希望可以遍历这个集合。尽管我们可以使用加强for循环和Itrator迭代器来进行操作,但是此时我们为了讲解一个新的方法,优先选择匿名内部类的方式来进行

你可以看到,我们首先让coll调用了forEach的方法,然后在这个方法之中创建了Consumer接口 然后所谓的匿名内部类为什么叫”匿名“内部类呢?你会发现这个public void accept(String s)这个类是没有类名的,accept是它要复写的方法名。因此这个类将无法被外部调用,你可以理解成它是一个临时工,其他有名字的类是有编制的工人。这个匿名内部类只在这个接口中发挥作用,并且无法被其他的部分所调用。

但是显然 匿名内部类这种写法还是有些冗杂了,我们希望写代码更加的简洁

于是我们引入了Lambda表达式来对代码进行优化

我们现在介绍Lambda表达式:

(方法的形式参数)->方法体

我们可以分两步来讲解Lambda表达式 这两步任意一个部分都可以独立发挥作用 但是表示简化的两种不同形态 你可以理解为繁体字和简体字

coll.forEach((String s)->{System.out.println(s);});

这里你会发现 原先的new Consumer<String>这些冗杂的部分消失了 我们仅保留了匿名内部类accept这个方法的形式参数与其类型 以及方法体里面输出的语句

但是我想这种写法还可以更加优化一些!

我们可以继续简化:

coll.forEach(s->System.out.println(s)) ;

非常好!现在你发现我们调用起来已经十分的方便了!

此时我们的lambda表达式已经将方法体的括号也省去 只剩下了(不含数据类型的形式参数)->方法体内的输出语句

现在相信你对lambda表达式与匿名内部类有了更深层的理解 我们现在附上完整的代码共学习研究

import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Consumer;public class Main{public static void main(String[] args){/*今天我们用lambda表达式进行遍历*///1.创建集合并且添加元素Collection<String> coll = new ArrayList<>();coll.add("zhangsan");coll.add("lisi");coll.add("wangwu");//2.我们先用匿名内部类的形式进行遍历/*这里你可能会问?为什么要用匿名内部类呢?我想你可能忘记了 我们引入lambda表达式的原因我们正是因为匿名内部类这种写法过于冗杂 过于体现了不必要的<面向对象>式编程风格 因此提出了更高效 在既定区域更有用的<函数式编程>思想->也就是产生了lambda这种写法*/coll.forEach(new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}});//lambda表达式写法/*(方法形参)->(方法体)*/coll.forEach((String s)->{System.out.println(s);});coll.forEach(s->System.out.println(s)) ;}
}

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

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

相关文章

客服管理者如何有效管理客服团队,有哪些高效方式?

在如今的市场竞争中&#xff0c;客户服务是企业成功的关键因素之一。因此&#xff0c;客服团队的有效管理至关重要。客服管理者需要了解如何有效地管理客服团队&#xff0c;以确保客户的满意度和忠诚度&#xff0c;从而提高企业的竞争力。 以下是客服管理者如何有效管理客服团队…

CSS特效020:涌动的弹簧效果

CSS常用示例100专栏目录 本专栏记录的是经常使用的CSS示例与技巧&#xff0c;主要包含CSS布局&#xff0c;CSS特效&#xff0c;CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点&#xff0c;CSS特效主要是一些动画示例&#xff0c;CSS花边是描述了一些CSS…

206. 反转链表

206. 反转链表 题目&#xff1a; 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例&#xff1a; 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1…

【Openstack Train安装】六、Keystone安装

OpenStack是一个云计算平台的项目&#xff0c;其中Keystone是一个身份认证服务组件&#xff0c;它提供了认证、授权和目录的服务。其他OpenStack服务组件都需要使用Keystone来验证用户的身份和权限&#xff0c;并且彼此之间需要相互协作。当一个OpenStack服务组件接收到用户的请…

绿色积分如何拉伸经济发展?场景适用何处?

一、引言 绿色积分发展政策是一种新兴的商业模式&#xff0c;它旨在通过积分奖励的方式鼓励消费者和企业采取环保行为&#xff0c;促进绿色消费和可持续发展。这种商业模式不仅有利于环境保护&#xff0c;也有利于提高消费者和企业的参与度和粘性&#xff0c;为商业模式的创新和…

C++: String类接口学习

文章目录 STL简介一. 为什么要有string类二. STL 中的 string 类介绍1. string 类描述2. 关于 basic_string 三. string 类的常用接口1. string 类的常见构造2. string 类的容量操作size 和 lengthcapacitymax_sizereserveresize 3. string 类对象的访问及遍历操作operator[] 和…

网站公安备案流程

1.公安备案网址 https://beian.mps.gov.cn/ 选择用户登录->法人用户登录 左边的码下载APP&#xff0c;登上去之后用APP扫右边的码&#xff0c;人脸识别

mysql子查询及其子查询的合并

表结构为 表名 notice 游戏类型 n_type(斗地主1、斗地主2、斗地主3) 资讯 n_news (新闻、活动、公告) 时间 n_time 需求 查询notice表中游戏类型为“斗地主1”的最新一条新闻、最新一条活动、最新一则公告&#xff0c;只能使用一条sql语句 思路 查询分为三个部分&am…

Python三级 每周练习题28

如果你感觉有收获&#xff0c;欢迎给我微信扫打赏码 ———— 以激励我输出更多优质内容 题目: 1.运行hex(),得到 xa&#xff0c;括号里面填什么? 2.十六进制数100&#xff0c;对应10进制数是多少? 3.int(‘13’,8) 返回值是? 4.int(‘100010’,2) 返回值是? 5.int(‘2af…

强基固本,红海云数字化重塑提升国企干部管理能力

国有企业的干部管理体系建设具有重要的战略意义&#xff0c;对于构建高素质专业化的干部队伍&#xff0c;推动企业高质量发展至关重要。特别是在党的二十大以后&#xff0c;建设中国特色现代企业制度&#xff0c;在完善公司治理中加强党的领导&#xff0c;加强党管干部党管人才…

C# 调用 c++ dll

C# 调用 c dll 首先 c 库 dll 要定义 代码中定义 CPP_EXPORTS #ifdef LASERSDK_EXPORTS #define CPP_EXPORTS __declspec(dllexport) #else #define CPP_EXPORTS __declspec(dllimport) #endif编译器定义 LASERSDK_EXPORTS 普通函数 c extern "C" CPP_EXPORTS …

ucharts中,当数据为0时,不显示

当为0时&#xff0c;会显示出来&#xff0c;值比较小的时候&#xff0c;数据会显示在一起&#xff0c;不美观 期望效果&#xff1a; 实现步骤&#xff1a; 我是将uCharts插件下载导入到src/uni_modules下的 1、修改src/uni_modules/qiun-data-charts/js_sdk/u-charts/confi…

【漏洞复现】OpenTSDB 2.4.0 命令注入(CVE-2020-35476)漏洞复现

漏洞描述 官方文档这样描述:OpenTSDB is a distributed, scalable Time Series Database (TSDB) written ontop of HBase; 翻译过来就是,基于Hbase的分布式的,可伸缩的时间序列数据库。 主要用途,就是做监控系统;譬如收集大规模集群(包括网络设备、操作系统、应用程序…

有趣的代码——猜数字游戏的实现

前面介绍过很多的C语言常识&#xff0c;但是我们都知道“兴趣是最好的老师”&#xff0c;所以&#xff0c;今天我们用之前讲过的一些知识&#xff0c;加上部分新补充的知识点&#xff0c;写一个“猜数字”的小游戏&#xff0c;来丰富我们的编程学习生活&#xff0c;感受来自C语…

Java高级技术(反射:获取类的构造器)

一&#xff0c;常用方法 二&#xff0c;案例 &#xff08;1&#xff09;&#xff0c;获取全部构造器 &#xff08;2&#xff09;&#xff0c;获取某个构造器 &#xff08;3&#xff09;&#xff0c;实验类 三&#xff0c; 初始化对象 四&#xff0c;案例

分析SSH登录尝试的日志文件,如果某个IP地址失败次数超过5次,加入黑名单

防止暴力破解脚本 这个脚本的主要目的是查找/var/log/secure日志文件中包含"Failed"的行&#xff0c;并统计每个IP地址失败的次数。如果某个IP地址失败的次数大于5&#xff0c;则将该IP地址添加到/etc/hosts.deny文件中&#xff0c;以禁止该IP地址访问sshd。 脚本需…

【2023.11.29】2-路归并排序学习

代码&#xff1a; ​ #include <iostream> #define MAXSIZE 1000 using namespace std;typedef struct {int key;char* otherinfo; }RedType;typedef struct {RedType* r;int length; }SqList;void Create_Sq(SqList& L) {int i, n;cin >> n; //输入的值不…

【数据结构】——堆排序

前言&#xff1a;我们已经学习了堆以及实现了堆&#xff0c;那么我们就来给堆进行排序。我们怎么来进行排序呢&#xff1f;这一次我们就来解决这个问题。 如果我们堆排序要求排序&#xff0c;我们是建立大堆还是小堆呢&#xff0c;如果我们建的小堆的话&#xff0c;那我们在排序…

js小技巧|如何提取经过Function函数混淆了的代码

关注它&#xff0c;不迷路。 本文章中所有内容仅供学习交流&#xff0c;不可用于任何商业用途和非法用途&#xff0c;否则后果自负&#xff0c;如有侵权&#xff0c;请联系作者立即删除&#xff01; 1.需求 星友发过来一个混淆代码&#xff0c;打开一看&#xff0c;长这…

“前端已死”?从ChatGPT与低代码平台看未来编程之路

每隔一段时间&#xff0c;“前端已死”的论调就会如潮水般重新涌现&#xff0c;引发行业内外的热议。这种论调背后&#xff0c;除了对于新技术&#xff0c;如ChatGPT、GPT-4对前端开发者影响的担忧&#xff0c;还反映了人们对于技术变革的焦虑。 作为前端开发者&#xff0c;我坚…