Lambada表示式

Lambada   

Lambda表达式是Java中的一个重要特性,用于简化函数式编程。它提供了一种更简洁的方式来编写匿名函数,可以被赋值给一个变量,或者作为参数传递给其他方法。

Lambda表达式的基本语法如下:

(parameter1, parameter2, ..., parameterN) -> { // 方法体 }

其中,括号内的参数是方法的参数列表,箭头符号"->"是Lambda操作符,箭头符号前面是参数列表,箭头符号后面是方法体。

Lambda表达式可以具有零个、一个或多个参数,方法体可以是一条语句或一个代码块。当方法体只有一条语句时,可以省略大括号和return关键字。

Lambda表达式的作用是简化代码,提高代码的可读性。它可以替代传统的匿名内部类的使用方式,使代码更加简洁。在函数式编程中,Lambda表达式常用于实现函数式接口(Functional Interface),以便可以直接调用接口中的抽象方法。

Lambada 原理    

Lambada表达式是Java 8中引入的一种新特性,它是一种匿名函数,可以被作为参数传递给方法或存储在变量中。

Lambada表达式的原理是基于函数式编程的概念。函数式编程是一种编程范式,其中函数被视为一等公民,可以像其他类型的变量一样被传递、存储和操作。Lambada表达式允许我们以一种简洁、灵活的方式定义函数。

Lambada表达式的语法如下: (parameter1, parameter2, ..., parameterN) -> { body }

其中,参数列表可以为空,也可以包含多个参数,用逗号分隔。箭头符号 "->" 将参数列表与函数体分隔开来。函数体可以是一条表达式,也可以是一个代码块。

Lambada表达式的执行方式与普通的方法调用类似,可以直接调用,也可以作为参数传递给其他方法。

Lambada表达式的优势在于它的简洁性和灵活性。它不需要显式地定义方法,可以在需要的地方直接定义函数逻辑。这样可以减少代码量,并提高代码的可读性和维护性。此外,Lambada表达式可以捕获外部的局部变量,使得函数可以访问外部环境的状态。

   

在 Java 中,Lambda 表达式通过接口的实例化进行调用。Lambda 表达式可以转换为函数式接口的实例,而函数式接口是只有一个抽象方法的接口。

在底层,Java 编译器将 Lambda 表达式转换为一个匿名类,该匿名类实现了函数式接口,然后将 Lambda 表达式的方法体作为该匿名类的实现。对于每个 Lambda 表达式,编译器生成一个方法,该方法包含 Lambda 表达式的代码。

当调用 Lambda 表达式时,实际上是调用了函数式接口的方法。编译器会根据 Lambda 表达式的参数和返回值类型,以及函数式接口方法的参数和返回值类型进行类型检查。然后,将 Lambda 表达式转换为函数式接口的实例,然后调用函数式接口的方法。

在运行时,JVM 会创建函数式接口的实例对象,并调用其方法。底层的调用过程与调用普通接口方法类似,只是被调用的方法是 Lambda 表达式的方法体。

案例

   

package com.fish.modeltest.test;import java.io.File;
import java.io.FileFilter;/*** @program: model-test* @description:* @author: lyl* @create: 2024-05-28 14:42**/
import java.io.File;
import java.io.FileFilter;public class LambadaTest {public static void main(String[] args) {/*** JDK8之后推出了一个新的特性:lambda表达式* lambda表达式可以用更精简的方式创建匿名内部类。* 语法:* (参数列表)->{*     方法体* }* 不是所有匿名内部类创建的情景都可以替换为lambda.前提要求是实现的接口只能有一个抽象方法时才可以* 使用lambda表达式。*/FileFilter filter = new FileFilter() {public boolean accept(File file) {return file.getName().contains("o");}};//忽略了接口名和方法名FileFilter filter1 = (File file) -> {return file.getName().contains("o");};//参数类型可以忽略。如果方法只有一个参数时,那么"()"也可以忽略。FileFilter filter2 = file -> {return file.getName().contains("o");};//如果方法体只有一句代码,那么可以将方法体"{}"忽略,如果含有return则return要一同忽略FileFilter filter3 = file -> file.getName().contains("o");File dir = new File(".");
//        File[] subs = dir.listFiles(new FileFilter() {
//            public boolean accept(File file) {
//                return file.getName().contains("o");
//            }
//        });File[] subs2 = dir.listFiles(f->f.getName().contains("o"));/*lambda表达式也是编译器认可的,最终会被编译器改回成内部类创建的形式*/File[] subs = dir.listFiles(f -> f.getName().contains("o"));}
}

总结 

       

Lambda表达式是Java 8引入的一种新的语法特性,用于简化函数式编程中的匿名函数的定义和使用。它可以替代使用匿名内部类的方式来定义函数式接口的实例。

Lambda表达式由三个部分组成:

  1. 参数列表:指定了Lambda表达式所需要的输入参数。如果没有参数,可以使用空括号表示。
  2. 箭头符号:箭头符号"->"用于分隔参数列表和Lambda表达式的主体部分。
  3. Lambda主体:指定了Lambda表达式的执行逻辑,可以是一个表达式或一个代码块。

Lambda表达式的语法如下所示: (parameter1, parameter2, ...) -> { // Lambda主体 }

Lambda表达式可以根据上下文的类型进行类型推断,因此可以省略参数类型的声明。另外,如果Lambda主体只有一行代码,可以省略大括号和return关键字。

Lambda表达式可以用于替代使用匿名内部类的情况,特别适用于函数式接口的实现。函数式接口是指只包含一个抽象方法的接口,可以使用@FunctionalInterface注解标记。

Lambda表达式具有以下特点:

  1. 可以捕获外部的局部变量或参数,使其成为Lambda表达式的闭包。
  2. 可以作为参数传递给方法或函数,并作为返回值返回。
  3. 可以使用Java 8中新增的函数式接口,以及Java标准库中的函数式接口,如Predicate、Consumer等。
  4. 可以与Java 8的流(Stream) API一起使用,实现函数式编程的功能。





















 

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

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

相关文章

基于物联网技术的智能家居实训教学解决方案

引言 随着信息技术的飞速发展,,物联网(IoT)已深入至我们生活的每一个角落,从智能家居、智能健康、智能交通到智慧城市,无所不在。物联网技术已成为推动社会进步和产业升级的重要力量。智能家居作为物联网技…

生成式对抗算法

生成式对抗算法,通常被称为GAN(Generative Adversarial Networks,生成式对抗网络),是深度学习在图像生成方面的重要应用。生成式对抗算法是一种强大的深度学习技术,它能够在无监督学习的环境下生成高质量的数据,为多个领域的应用提供了可能性。然而,由于其训练过程相对…

5位机械工程师如何共享一台服务器算力

在数字化浪潮的推动下,算力共享技术正逐渐成为机械工程师们提升工作效率、优化资源配置的重要工具。那么五位机械工程师如何共享一台服务器算力呢? 首先,我们需要了解算力共享的基本概念。算力共享是指通过特定的技术手段,将分散…

探索Web前端三大主流框架:Angular、React和Vue.js

在现代Web开发中,前端框架的选择对于项目的成功至关重要。Angular、React和Vue.js作为三大主流前端框架,各自拥有独特的特点和优势,本文将对它们进行详细的探索和比较。 1. Angular Angular是由Google开发和维护的一款开源前端框架&#xf…

etcd学习笔记-未完成整理

博客参考:K8s组件:etcd安装、使用及原理(Linux) 原理:分布式系统架构中对一致性要求很高,etcd就满足了分布式系统中的一致性要求。实现了分布式一致性键值对存储的中间件。设计用来可靠而快速的保存关键数…

机器学习之支持向量机SVM

支持向量机 概念 是supported vector machine(支持向量机),即寻找一个超平面使样本分成两类,且间隔最大分类 分类 硬间隔 若样本线性可分,且所有样本分类正确情况下,寻找最大间隔,即硬间隔 若…

Python中的设计模式:常见问题的永恒解决方案

在软件开发这片日新月异的领域里,Python 以其简洁与多用途性脱颖而出,成为领航语言。面对技术的不断变革,一些挑战却恒久不变。设计模式,作为这些问题的成熟解决方案,为高效编程提供了一个至关重要的工具箱。本文将深入…

论文精读:TASKBENCH: BENCHMARKING LARGE LANGUAGE MODELS FOR TASK AUTOMATION

Author: Dongsheng Li, Kaitao Song, Kan Ren, Siyu Yuan, Weiming Lu, Wenqi Zhang, Xu Tan, Yongliang Shen, Yueting Zhuang Institution: 复旦大学(Fudan University), 微软亚洲研究院(Microsoft Research Asia), 浙江大学(Zhejiang University) Summary: LLM 带动了…

计算机毕业设计 | springboot+vue汽车修理管理系统 汽修厂系统(附源码)

1,项目背景 在如今这个信息时代,“汽车维修管理系统” 这种维修方式已经为越来越多的人所接受。在这种背景之下,一个安全稳定并且强大的网络预约平台不可或缺,在这种成熟的市场需求的推动下,在先进的信息技术的支持下…

基于python实现的深度学习的车牌识别系统

基于python实现的深度学习的车牌识别系统 开发语言:Python 数据库:MySQL所用到的知识:Django框架工具:pycharm、Navicat、Maven 系统功能实现 登录页面 在车牌识别系统当中肯定是有登录的。怎么说呢,登录页面其实还是和最初的设…

提取Chrome中Cookie工具分享

用法 只需将站点输入即可。 SharpCookieMonster.exe [https://sitename.com] [chrome-debugging-port] [user data dir] 可选的第一个参数分隔chrome启动时最初连接的网站(默认为https://www.google.com)。 第二个可选参数指定用于启动chrome调试器的…

发票查验接口、发票识别接口-C#调用示例

发票对于个人来说是重要的报销依据,一旦丢失就不能用之报销。对于公司来说,发票是公司做账不可缺少的一部分,相信每位财务人员都会小心存放发票。可世界之大,任何事情都会发生,收到假发票入账的情况在企业当中也时常发…

C++学习/复习7--泛型编程/函数模板/类模板

一、泛型编程 1.Swap()函数的模板实现 二、函数模板 1.概念 2.格式 3.实例化 (1)隐式与显示 注意事项:隐式与显示类型转换会产生临时变量,临时变量有常性,所以形参前加const 三、类模板 1.定义 2.例1 3.例2 4.注意事…

【HarmonyOS】View点击穿透,层叠View点击事件控制

【HarmonyOS】View点击穿透,层叠View点击事件控制 问题背景: 在HarmonyOS中,经常会有层叠的View的布局,当碰到需要穿透的布局需求。就需要能控制View对点击事件的处理。 方案一,使用touchable: 目前虽然函…

深入解析三层架构:构建稳定高效的软件系统

概述 顾名思义,三层架构分为三层,分别是“数据访问层”、“业务逻辑层”、“表示层”。 数据访问层:数据访问层在作业过程中访问数据系统中的文件, 实现对数据库中数据的读取保存操作。 表示层:主要功能是 显示数据和…

LeetCode刷题之HOT100之盛最多水的容器

狂风大作,降温了。下午提前把题目做了,上午做的最长回文子串还不是很能理解,慢慢理解吧,且看题 1、题目描述 2、逻辑分析 题目要求很清晰,我的思路就是暴力解法:枚举全部可能的情况(两数不相等…

力扣爆刷第141天之二叉树十连刷(翻转、对称、深度、平衡、路径)

力扣爆刷第141天之二叉树十连刷(翻转、对称、深度、平衡、路径) 文章目录 力扣爆刷第141天之二叉树十连刷(翻转、对称、深度、平衡、路径)一、226. 翻转二叉树二、101. 对称二叉树三、104. 二叉树的最大深度四、111. 二叉树的最小…

【Qt QML】Dialog组件

带有标准按钮和标题的弹出对话框,用于与用户进行短期交互。 这个描述指的是一个常见的用户界面元素,即一个临时弹出的窗口(或对话框),它包含一个标题,显示对话框的用途或内容描述,以及一系列标…

[数据集][目标检测]航空发动机缺陷检测数据集VOC+YOLO格式291张4类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):291 标注数量(xml文件个数):291 标注数量(txt文件个数):291 标注类别…

Kyndryl 与 Nvidia 建立新的人工智能基础设施合作伙伴关系

Kyndryl与Nvidia宣布达成新的人工智能基础设施战略合作,共同推动AI技术的广泛应用。根据这一合作,Nvidia的先进AI软件解决方案将被引入Kyndryl的开放集成平台——Kyndryl Bridge,以优化基础设施工作负载,并为客户提供更高效的IT服…