从0到0.1学习 lambda表达式(Java版)

news2025/7/6 20:41:48

编码几年时间,有一个东西似乎一直也逃不过去,那就是lambda表达式。
无论是c#,Python还是Java,lambda的思想都是共通的。但以下的语法和实例为java。

现在就来说说这个看似很难的lambda表达式

什么是lambda表达式?

lambda表达是实质上就是一个匿名函数
那什么是匿名函数呢?
匿名函数就是没有名字的函数,可以直接嵌入在方法内。里面只包括 函数参数(parameter)+表达式(expression) 或者 函数参数(parameter)+陈述(statements)
PS: 表达式产生值 eg. a+b;2。这两个都属于表达式。 陈述重在操作 比如 if a==b then c=a; c=a+b将xx赋值给xx,或者循环/判断
实际上,陈述也包含了表达式,
因此,我们可以将lambda表达式当成可以输出一个值的函数来使用(把lambda表达式赋给某个值)

语法如下

// no parameter
() -> expression
// one or multi parameters
parameter -> expression
(param1,param2) -> expression
// muiti statements
(param1,param2) -> { statements }

举个例子(JAVA)

(int x, int y) -> x * y;

lambda表达式解决了什么问题?

偷了一张知乎里大哥的图,此为java语法(java 8及以上)
在这里插入图片描述
可以看到,图中简略了一整个函数的过程。由之前的嵌套代码变成了一行简洁的代码。

进阶 - 与接口一起使用

public class Test
{
    // 接口FuncInter1中定义了有且仅有一个抽象函数
    interface FuncInter1
    {
        int operation(int a, int b);
    }
    public static void main(String args[])
    {
		// 使用lambda表达式的方式实现了FuncInter1接口中的唯一函数
        FuncInter1 add = (int x, int y) -> x + y;

        FuncInter1 multiply = (int x, int y) -> x * y;
        // 使用正常的方式调用接口中的参数即可
        System.out.println("Addition is " + add.operation(2, 3));
        System.out.println("Multiplication is " + multiply.operation(2, 3));
    }
}

当前方式是用lambda表达式实现接口后,用对应接口的对应函数调用lambda表达式从而得到结果,那有没有更简单的方式呢?真的有!

public class Test
{
    // 依然是原来的接口
    interface FuncInter1
    {
        int operation(int a, int b);
    }
  	// 将接口中的方法封装起来,这样只需要实现方法及输入参数就可以调用了
    private int operate(int a, int b, FuncInter1 fobj)
    {
        return fobj.operation(a, b);
    }
  
    public static void main(String args[])
    {
        FuncInter1 add = (int x, int y) -> x + y;
        FuncInter1 multiply = (int x, int y) -> x * y;

		// 直接掉用封好的函数
        System.out.println("Addition is " + operate(6, 3, add));
        System.out.println("Multiplication is " + operate(6, 3, multiply));

    }
}

参考

  1. 介绍什么statement与expression:https://farside.ph.utexas.edu/teaching/329/lectures/node11.html
  2. Java8-lambda表达式的简单介绍:https://www.geeksforgeeks.org/lambda-expressions-java-8/
  3. 图片来源:https://www.zhihu.com/question/20125256/answer/324121308

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

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

相关文章

【owt-server】m88分支和m59-server

OWT 单独有个webrtc的仓库,里面有m88的分支Merged Upgrade sdk to m88 for webrtc node #1026 提交记录 主干merge Merge pull request #1026 from starwarfan/mst-88webrtc-m88 目录 构建修改

【信管2.2】项目管理知识体系与组织结构

项目管理知识体系与组织结构上一次课中,我们已经学过了项目以及项目管理的概念,这些内容帮我们认识到了项目到底是个什么东西,有什么特点,和运营有什么区别等等。今天我们就继续沿着项目这件事说下去,我们将一起探讨一…

【知识网络分析】共引网络(co-citation)

共引网络(co-citation) 1 读取本地文献构建共引网络数据集2 网络数据集精简3 社团群体划分4 节点中心度相关指标计算1 读取本地文献构建共引网络数据集 RC.networkCoCitation()方法中的参数与RC.networkCitation()方法中的参数功能一致。该案例中使用的数据集同样为2020-202…

SpringBoot框架保姆级笔记一看就会

文章目录 文章目录文章目录[toc]1️⃣ 简介一. 什么是 [IoC](https://so.csdn.net/so/search?qIoC&spm1001.2101.3001.7020) 容器?二. AOP面向切面编程三. SSM整合四. HttpServletRequest五. HttpServletResponse六. Cookie 与 Session七. Cookie八. Session九…

Java异常01:Error 和 Exception

什么是异常 # 实际工作中,遇到的情况不可能是非常完美的。比如:你写的某个模块,用户输入不一定符合你的实际要求、你的程序要打开某个文件,这个文件可能不存在或者文件格式不对,你要读取数据库的数据,数据…

最全面的SpringMVC教程(一)——SpringMVC简介

前言 本文为SpringMVC相关教程,下边将对SpringMVC进行简单介绍,具体包含:对MVC架构的回顾,什么是SpringMVC,SpringMVC编程示例(包含配置版示例、注解版示例),初识SpringMVC&#xff…

NM DEV Mathematics for Java 【suanshu.net免费】

NM Dev是一个面向对象、高性能、经过广泛测试和专业记录的数学编程库,在S2上运行。自 2010 年开发以来,它是大量经过编码的数值算法,因此它们是可靠的面向对象、统一和可测试的。编程经验或数学知识很少的用户可以通过快速组合类轻松地为他或…

备战 2023 春招,P7 大咖手打 26 大后端面试专题神技,1500 题解析助力

年过后,不少人已经蓄势待发,信心满满地准备投递简历,到处面试,在不同的 Offer 之中择优而栖。 与此同时,也有人会悔恨自己这半年进步不大,每天噼里啪啦敲代码,但面对那些不能再熟悉的 Java 面试…

大数据毕设选题 - 生成对抗网络的照片上色动态算法设计与实现(深度学习 opencv python)

文章目录1 前言1 课题背景2 GAN(生成对抗网络)2.1 简介2.2 基本原理3 DeOldify 框架4 First Order Motion Model1 前言 🔥 Hi,大家好,这里是丹成学长的毕设系列文章! 🔥 对毕设有任何疑问都可以问学长哦! 这两年开始…

Linux项目后端部署及JDKTomcatMySQL安装

前言 上一篇文章简单的分享了在VMware上安装linux系统,本篇文章将要分享的内容是使用linux系统完成项目的部署 一、前置准备工作 在Windows系统中,我们要在开发环境下才能进行项目的开发。那么在linux系统中也是,在安装完linux系统后&#xf…

NoSuchMethodError的常见原因和通用解决方式

目录 环境信息 问题描述 错误分析 解决方法 常见原因 1.第三方包,作用域不对导致应用没导入该包 2.编译时和运行时使用的版本不一样 3.JDK版本不一样 4.多个同路径、同名的类 1.代码复制场景 2.代码移动场景 排查步骤 附录 Maven仲裁机制: …

为啥这么人选择iPhone

01.听音乐(10元/月) 歌曲很全 多个终端支持 果子自带的Music app 在那个设备都可以使用, 包括MacBook Pro,iPhone,iPad,iwatch等 02.周边配件方便购买 03.遇到问题好解决 04.使用稳定,不会有广告&#x…

MySQL海量数据优化(理论+实战) 吊打面试官

一、准备表数据 咱们建一张用户表,表中的字段有用户ID、用户名、地址、记录创建时间,如图所示 ​OK,接下来准备写一个存储过程插入一百万条数据 CREATE TABLE t_user (id int NOT NULL,user_name varchar(32) CHARACTER SET utf8 COLLATE ut…

[附源码]Python计算机毕业设计防疫物资捐赠系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,我…

Vue组件化编程开发

目录 一.模块 二.组件 &#xff08;快捷键< 回车 生成单组件模板&#xff09; 三.非单文件组件 四.单文件组件: 首先理解模块和组件的基本概念: 一.模块 1.理解:向外提供特定功能的js程序&#xff0c;一般就是一个js文件 2.为什么: js文件很多很复杂 3.作用:复用js, 简…

Mybatis-Plus+SpringBoot结合运用

目录 前言 一、创建Maven项目导入相关的依赖 二、在resources添加日志和连接数据库 1.日志文件(log4j.properties) 2.连接数据库&#xff08;application.properties&#xff09; 三、编写pojo &#xff08;注解编写get/set/tostring&#xff09; 四、UserMapper编写继承…

Fragment的生命周期

文章目录Fragment的生命周期Fragment的状态和回调运行状态暂停状态停止状态销毁状态回调方法附加的回调方法onAttach()onCreateView()onActivityCreated()onDestroyView()onDetach()Fragment完整的生命周期图Fragment的生命周期 和Activity一样,Fragment也有自己的生命周期,并…

c++实现图书管理系统v1.0

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录系统要求功能1.首页2.退出系统3.添加图书4.删除书籍5.查找书籍6.修改书籍信息7.显示所有图书8.查看书籍是否在书架上总代码收获系统要求 用c实现一个可以增删改查的…

商城项目环境准备 — docker安装kinaba和配置ik中文分词器

一、拉取kinaba镜像 docker pull kinaba:7.12.1二、启动kinaba容器 docker run -d \ --name kibana \ -e ELASTICSEARCH_HOSTShttp://es:9200 \ --networkes-net \ -p 5601:5601 \ kibana:7.12.1三、访问 输入http://ip:5601 ip&#xff1a;服务器端口 四、安装ik分词器 …

研究光度立体法阶段性小结和优化(可20ms获取4个2500*2000灰度图的Normal Map)。...

这个东西是我接触的第一个非2D方面的算法&#xff0c;到目前为止其实也没有完全搞定&#xff0c;不过可能短时间内也无法突破。先把能搞定的搞定吧。 这个东西也有一大堆参考资料&#xff0c;不过呢&#xff0c;搜来搜去其实也就那些同样的东西&#xff0c;个人觉得就属这个文章…