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

java中的lambda表达式

java中的lambda表达式

  • java中的lambda表达式
    • 语法
      • 参数的不同写法
      • 代码块的不同写法
  • 函数式接口
    • 运用
  • 方法引用
    • object::instanceMethod
    • Class::staticMethod
    • Class::instanceMethod

什么是lambda表达式?

带参数变量的表达式。

java中的lambda表达式

我对java中lambda表达式是这样理解的:一个隐藏了返回类型的匿名方法。

// 方法
void methodName(String str) {};// lambda表达式
(String str) -> {};

语法

参数 -> 代码块;

// 示例:完整写法
(String str) -> {System.out.println(str);
};// 不存在任何参数时,参数部分仍需要用一个 "()" 表示
() -> {System.out.println();
};// 当返回类型不为 "void"时,在 "{}" 中,需包含显示的 return语句
(String str) -> {System.out.println(str);return str;
};

参数的不同写法

// 当参数的类型可以通过上下文推断出时,可忽略类型
(str) -> {System.out.println(str);
};// 当类型被忽略时,且只存在一个参数,可以省略 "()"
str  -> {System.out.println(str);
};

代码块的不同写法


// 当代码块中内容可通过一个表达式来表示时,可以省略 "{}"
(String str)  -> System.out.println(str);// 在 "{}"被省略时,return语句为隐式
(String str)  -> str;

函数式接口

函数式接口:只有一个抽象方法的接口。

问:为什么Comparator包含两个抽象方法compare 和 equals,仍属于函数式接口?
答:Object中已实现的一些方法,如:equals、toString、clone等,会让方法不再是抽象的。

运用

lambda表达式可以转化为函数式接口。

我将其理解成,lambda表达式可赋值给一个函数式接口变量,此时可以把lambda表达式想象成一个实现了该接口的类对象。
PS:不能将lambda表达式与类对象划等号,lambda表达式能做的只有赋值给函数式接口,不能同对象一样调用方法。

如何赋值(赋值的条件)?

// 以Comparator为例
public interface Comparator<T> {...int compare(T o1, T o2);...
}public class Demo {// Comparator<T> instance = (T str1, T str2) -> (int)result;Comparator instance = (str1, str2) -> 0;
}

方法引用

使用现成方法来完成所需函数

object::instanceMethod

System.out::println 等价于 x -> System.out.println(x)

Class::staticMethod

Math::paw 等价于 (x, y) -> Math(x, y)

Class::instanceMethod

String::compareToIgnoreCase 等价于 (x, y) -> x.compareToIgnoreCase(y)

相关文章:

java中的lambda表达式

java中的lambda表达式java中的lambda表达式语法参数的不同写法代码块的不同写法函数式接口运用方法引用object::instanceMethodClass::staticMethodClass::instanceMethod什么是lambda表达式&#xff1f; 带参数变量的表达式。 java中的lambda表达式 我对java中lambda表达式是这…...

0.1opencv库VS环境配置

opencv环境配置 感谢大家学习这门教程。本系列文章首发于公众号【周旋机器视觉】。 这个这门课程的第一篇文章&#xff0c;主要是opencv环境配置。 本教程的环境为 Visual Studio 2019CMake 3.22.3opencv 4.6.0windows 10 1、opencv的源码下载与安装 直接访问opencv官网&…...

第五十七章 树状数组(二)

第五十七章 树状数组&#xff08;二&#xff09;一、差分的缺陷二、树状数组与差分三、例题题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示样例 1 解释&#xff1a;数据规模与约定代码一、差分的缺陷 差分的作用是能够在O(1)的时间内给一段区间加上相同的数字&am…...

比特币的网络

比特币的网络 1. DNS-seed 在比特币网络中,初始节点发现一共有两种方式。 第一种叫做 DNS-seed,又称 DNS 种子节点,DNS 就是中心化域名查询服务,比特币的 社区维护者会维护一些域名。 比如 seed.bitcoin.sipa.be 这个域名就是由比特币的核心开发者 Sipa 维护的,如果我…...

ChatGPT的模型介绍及GO语言实现API

ChatGPT除了大家熟悉的GPT3之外&#xff0c;还有其他辅助模型&#xff0c;比如处理代码的以及有害信息过滤的系统。总的来说是下面三个组成&#xff1a;GPT-3&#xff1a;一组能够理解和生成自然语言的模型CodexLimited beta&#xff1a;一组可以理解和生成代码的模型&#xff…...

Tile防丢器引入全新防盗模式,苹果Find My功能拓展到大众消费电子

Tile 宣布引入全新的防盗模式&#xff0c;Tile 配件启用之后&#xff0c;反跟踪扫描和安全功能就无法检测到该配件。Tile 为了遏制其物品追踪产品用于追踪某人&#xff0c;此前推出了 Scan and Secure 功能。iPhone 和安卓用户可以通过该功能扫描附近的 Tile 设备&#xff0c;以…...

物联网中RocketMQ的使用

物联网中RocketMQ的使用 1. 背景 随着物联网行业的发展、智能设备数量越来越多&#xff0c;很多常见的智能设备都进入了千家万户&#xff1b;随着设备数量的增加&#xff0c;也对后台系统的性能提出新的挑战。 在日常中&#xff0c;存在一些特定的场景&#xff0c;属于高并发请…...

用Three.js搭建的一个艺术场景

本文翻译自于Medium&#xff0c;原作者用 Three.js 创建了一个“Synthwave 场景”&#xff0c;效果还不错&#xff0c;在此加上自己的理解&#xff0c;记录一下。在线Demo. 地形构建 作者想要搭建一个中间平坦、两侧有凹凸山脉效果并且能够一直绵延不断的地形&#xff0c;接下…...

算法导论【字符串匹配】—朴素算法、Rabin-Karp、有限自动机、KMP

算法导论【字符串匹配】—朴素算法、Rabin Karp、有限自动机、KMP朴素字符串匹配算法Rabin-Karp算法有限自动机KMP算法朴素字符串匹配算法 预处理时间&#xff1a;0匹配时间&#xff1a;O((n-m1)m) Rabin-Karp算法 预处理时间&#xff1a;Θ(m)&#xff0c;需要预先算出匹…...

如何在 Python 中验证用户输入

要验证用户输入&#xff1a; 使用 while 循环进行迭代&#xff0c;直到提供的输入值有效。检查输入值在每次迭代中是否有效。如果该值有效&#xff0c;则跳出 while 循环。 # ✅ 验证用户输入的是否是整数num 0while True:try:num int(input("Enter an integer 1-10: …...

JVM详解——类的加载

文章目录类的加载1、Java程序如何运行2、Java字节码文件3、类加载4、类加载的过程5、类加载器6、类的加载方式7、类的加载机制8、双亲委派机制9、破坏双亲委派机制类的加载 1、Java程序如何运行 首先通过Javac命令将.java文件编译生成.class字节码文件。 Javac是Java编译命令&a…...

Ubuntu最新版本(Ubuntu22.04LTS)安装nfs服务器及使用教程

目录 一、概述 二、在Ubuntu搭建nfs服务器  &#x1f449;2.1 安装nfs服务器  &#x1f449;2.2 创建nfs服务器共享目录  &#x1f449;2.3 修改nfs服务器配置文件  &#x1f449;2.4 重启nfs服务器 三、客户端访问nfs服务器共享目录  &#x1f388;3.1 在nfs客户端挂载服…...

Python-第九天 Python异常、模块与包

Python-第九天 Python异常、模块与包一、了解异常1. 什么是异常&#xff1a;2. bug是什么意思&#xff1a;二、异常的捕获方法1. 为什么要捕获异常&#xff1f;2. 捕获异常的语法3. 如何捕获所有异常&#xff1f;三、异常的传递性1.异常是具有传递性的四、Python模块1. 什么是模…...

博彩公司 BetMGM 发生数据泄露,“赌徒”面临网络风险

Bleeping Computer 网站披露&#xff0c;著名体育博彩公司 BetMGM 发生一起数据泄露事件&#xff0c;一名威胁攻击者成功窃取其大量用户个人信息。 据悉&#xff0c;BetMGM 数据泄漏事件中&#xff0c;攻击者盗取了包括用户姓名、联系信息&#xff08;如邮政地址、电子邮件地址…...

初探Mysql反向读取文件

前言 Mysql反向读取文件感觉蛮有意思的&#xff0c;进行了解过后&#xff0c;简单总结如下&#xff0c;希望能对在学习Mysql反向读取文件的师傅有些许帮助。 前置知识 在Mysql中存在这样一条语句 LOAD DATA INFILE它的作用是读取某个文件中的内容并放置到要求的表中&#x…...

地图坐标系大全:常用地图坐标系详解与转换指南

介绍地图坐标系的基本概念和原理地图坐标系是用于描述地图上位置的数学模型。它可以用来表示地球表面上的任意一个点&#xff0c;使得这个点的位置可以在地图上精确定位。不同的地图坐标系采用不同的基准面和投影方式&#xff0c;因此会有不同的坐标系参数&#xff0c;不同的坐…...

使用 URLSearchParams 解析和管理URL query参数

介绍 首先 URLSearchParams是一个构造函数&#xff0c;会生成一个URLSearchParams对象&#xff0c;参数类型&#xff1a; 不传 &#xff5c; string &#xff5c; object &#xff5c; URLSearchParams&#xff0c; 并且遇到特殊字符它会自动帮我们encode 和 decode const ur…...

一台电脑安装26个操作系统(windows,macos,linux,chromeOS,Android,静待HarmonyOS)

首先看看安装了哪些操作系统1-4: windows系统 四个5.Ubuntu6.deepin7.UOS家庭版8.fydeOS9.macOS10.银河麒麟11.红旗OS12.openSUSE Leap13.openAnolis14.openEuler(未安装桌面UI)15.中标麒麟&#xff08;NeoKylin&#xff09;16.centos17.debian Edu18.fedora19.oraclelinux(特别…...

Python配置文件管理之ini和yaml文件读取

1. 引言 当我们设计软件时&#xff0c;我们通常会花费大量精力来编写高质量的代码。但这往往还不够&#xff0c;一个好的软件还应该考虑其整个系统&#xff0c;如测试、部署、网络等。其中最重要的一个方面是配置管理。 良好的配置管理应允许在任何环境中执行软件而不更改代码…...

实战一(下):如何利用基于充血模型的DDD开发一个虚拟钱包系统?

上一节课,我们做了一些理论知识的铺垫性讲解,讲到了两种开发模式,基于贫血模型的传统开发模式,以及基于充血模型的DDD开发模式。今天&#xff0c;我们正式进入实战环节&#xff0c;看如何分别用这两种开发模式&#xff0c;设计实现一个钱包系统。话不多说&#xff0c;让我们正式…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...