[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>() {
            @Override
            public 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>() {
            @Override
            public 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.mfbz.cn/a/197003.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

二十一、数组(6)

本章概要 数组排序Arrays.sort的使用并行排序binarySearch二分查找parallelPrefix并行前缀 数组排序 根据对象的实际类型执行比较排序。一种方法是为不同的类型编写对应的排序方法&#xff0c;但是这样的代码不能复用。 编程设计的一个主要目标是“将易变的元素与稳定的元素…

PLC:200smart

PLC&#xff1a;200smart 第十章、数据类型、数据存储1、数据类型1.1、有符号数1.2、有符号数 2、传送指令 第十一章、比较指令、整数、浮点数的运算1、比较指令1、运算指令1.1、浮点数运算1.2、整数运算 第十章、数据类型、数据存储 1、数据类型 数据类型分为两大类 无符号数…

Cream&Me 鲜奶油饼屋广州首店正式开业!

11月16日&#xff0c;Cream&#xff06;Me 鲜奶油饼屋在广州K11首店正式开业&#xff01; Cream&#xff06;Me鲜奶油饼屋与之前广州人气日式甜品品牌【KNOTKNOT珞珞】同属同一个团队打造&#xff0c;于2022年起筹备&#xff0c;首店于广州K11商场。C&#xff06;M以生日蛋糕日…

Vue3的项目创建到启动

Vue3的项目创建 检查node版本创建 npm init vuelatest 安装依赖 项目启动 启动成功

springcloud进销存管理系统源码

开发说明&#xff1a; jdk1.8&#xff0c;mysql5.7&#xff0c;idea&#xff0c;vscode springcloud springboot mybatis vue elementui 功能介绍&#xff1a; 后台管理&#xff1a; 统计分析&#xff1a;查看产品&#xff0c;采购&#xff0c;销售数量&#xff1b;统计近…

2023年【化工自动化控制仪表】考试资料及化工自动化控制仪表新版试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 化工自动化控制仪表考试资料参考答案及化工自动化控制仪表考试试题解析是安全生产模拟考试一点通题库老师及化工自动化控制仪表操作证已考过的学员汇总&#xff0c;相对有效帮助化工自动化控制仪表新版试题学员顺利通…

AutoSAR Classic Platform和Adaptive Platform 区别

概述 本文主要内容分为两章节。第一章节简要介绍了AUTOSAR的软件架构&#xff0c;设计理念以及方法论&#xff0c;对Classic Platform和Adaptive Platform做了简单的比较。第二章主要介绍了Adaptive Platform的特性。 第一章 AUTOSAR架构介绍 AUTOSAR(AUTomotive Open Syste…

解决苹果手机iphone手机强制重启

强制关机&#xff1a; 方法1.同时按住左侧的&#xff0c;- 键中的一个和右侧的电源键 方法2.点击桌面的悬浮键–设备–更多–重新启动

Jquery动画特效

1&#xff0c;Jquery提供的特效方法 2&#xff0c;实例代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…

小程序如何进行一键修复

在使用小程序过程中&#xff0c;难免会遇到一些问题&#xff0c;比如程序崩溃、功能异常等等。这时&#xff0c;版本一键修复就显得尤为重要了。下面&#xff0c;我们就来介绍一下小程序如何进行版本一键修复。 一、什么是版本一键修复&#xff1f; 版本一键修复是指在小程序…

【图像分割】【深度学习】PFNet官方Pytorch代码-PFNet网络损失函数模块解析

【图像分割】【深度学习】PFNet官方Pytorch代码-PFNet网络损失函数模块解析 文章目录 【图像分割】【深度学习】PFNet官方Pytorch代码-PFNet网络损失函数模块解析前言PM定位模块损失函数FM聚焦模块损失函数总结 前言 在详细解析PFNet代码之前&#xff0c;首要任务是成功运行PF…

会声会影2024旗舰版系统配置要求及格式支持

会声会影2024旗舰版是一款广受欢迎的视频编辑软件&#xff0c;它的最新版本&#xff0c;会声会影2023&#xff0c;已经发布。在这篇文章中&#xff0c;我们将探讨会声会影2024旗舰版系统配置要求及格式支持 会声会影2024是一款专业的视频剪辑软件&#xff0c;能够帮助用户制作高…

vue+uniapp校园寻物失物招领平台 微信小程序1f6z5

系统中的核心用户是管理员&#xff0c;管理员登录后&#xff0c;通过管理员菜单来管理后台系统。主要功能有&#xff1a;首页、个人中心、用户管理、物品分类管理、物品信息管理、物品归还管理、留言板管理、系统管理等功能。管理员用例如图3-7所示。 对于本网上失物招领小程序…

unity3d地图、地面跟着NPC跑

清除烘焙后&#xff0c;再 将地图、地面的设置为非静态。只设置NPC的寻路路面为静态&#xff0c;再烘焙

03、K-means聚类实现步骤与基于K-means聚类的图像压缩(1)

03、K-means聚类实现步骤与基于K-means聚类的图像压缩&#xff08;1&#xff09; 03、K-means聚类实现步骤与基于K-means聚类的图像压缩&#xff08;1&#xff09; 03、K-means聚类实现步骤与基于K-means聚类的图像压缩&#xff08;2&#xff09; 开始学习机器学习啦&#xf…

电力智能化系统(智能电力综合监控系统)

电力智能化系统是一个综合性的系统&#xff0c;它利用物联网、云计算、大数据、人工智能等技术&#xff0c;依托电易云-智慧电力物联网&#xff0c;采用智能采集终端和物联网关&#xff0c;将电力设备、用电负荷、电力市场等各个环节有机地联系起来&#xff0c;实现了对电力配送…

一篇学会cron表达式

1、定义 Cron表达式是一种用于定义定时任务的格式化字符串。它被广泛用于Unix、Linux和类Unix系统中&#xff0c;用于在指定的时间执行预定的任务。Cron表达式由6个字段组成&#xff0c;每个字段通过空格分隔开。 在本文中&#xff0c;我们将学习如何理解和编写Cron表达式。 C…

Java高级技术(单元测试)

一&#xff0c;概括 二&#xff0c;junit 三&#xff0c;案例 &#xff08;1&#xff09;&#xff0c;实验类 package com.bilibili;public class Name {public static void main(String name) {if (name null){System.out.println("0");return;}System.out.print…

电子学会C/C++编程等级考试2022年06月(三级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:制作蛋糕 小A擅长制作香蕉蛋糕和巧克力蛋糕。制作一个香蕉蛋糕需要2个单位的香蕉,250个单位的面粉,75个单位的糖,100个单位的黄油。制作一个巧克力蛋糕需要75个单位的可可粉,200个单位的面粉,150个单位的糖,150个单位的黄…

MyBatis-Plus条件构造器

说明 Wrapper&#xff1a;条件构造抽象类&#xff0c;最顶端父类AbstractWrapper&#xff1a;用于查询条件封装&#xff0c;生成sql的where条件QueryWrapper&#xff1a;查询条件封装UpdateWrapper&#xff1a;更新条件封装AbstractLambdaWrapper&#xff1a;使用Lambda语法La…