Java知识速记:Lambda表达式

server/2025/2/4 12:33:07/

Java知识速记:Lambda表达式

一、什么是Lambda表达式?

Lambda表达式是Java 8引入的一种简洁的表示函数式接口的方法,它使得可以将函数作为参数传递,并且可以在代码中以更简洁的方式实现函数式编程。Lambda表达式的基本语法如下:

java">(parameters) -> expression

其中,parameters 表示参数列表,-> 是一个箭头,expression 是要执行的代码。

二、Lambda表达式的基本用法

1. 简单实例

假设我们有一个列表,想要使用Lambda表达式进行排序。以下是传统方式与Lambda表达式的对比:

传统排序方式:

java">List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
Collections.sort(names, new Comparator<String>() {@Overridepublic int compare(String a, String b) {return a.compareTo(b);}
});

使用Lambda表达式:

java">List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
Collections.sort(names, (a, b) -> a.compareTo(b));

在这里,Lambda表达式大幅简化了代码,使其更为清晰。

2. 可重用性与高阶函数

Lambda表达式不仅提高了代码的简洁性,还能增强可重用性。可以将Lambda用作参数传递。以下是一个示例,使用Lambda表达式来进行数字运算:

java">@FunctionalInterface
interface Calculator {int compute(int a, int b);
}public class LambdaExample {public static void main(String[] args) {Calculator add = (a, b) -> a + b;Calculator subtract = (a, b) -> a - b;System.out.println("10 + 5 = " + add.compute(10, 5));System.out.println("10 - 5 = " + subtract.compute(10, 5));}
}

在这个例子中,通过Calculator接口,我们定义了不同的运算方式,只需传递不同的Lambda表达式即可实现多种功能。

三、Lambda表达式与集合操作

Java的集合框架提供了许多与Lambda表达式相结合的便利方法,尤其是Stream API。

1. 使用Stream进行过滤和映射

java">List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");List<String> filteredNames = names.stream().filter(name -> name.startsWith("A")).collect(Collectors.toList());System.out.println(filteredNames); // 输出 [Alice]

通过Stream API,搭配Lambda表达式,我们能够更直观地进行数据过滤和转换。

2. 其他操作示例

java">List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);int sum = numbers.stream().mapToInt(Integer::intValue).sum();System.out.println("Sum = " + sum); // 输出 Sum = 15

在这个例子中,我们利用mapToIntsum函数,简便地计算了列表的和。

四、Lambda表达式的注意事项

尽管Lambda表达式能极大地提高开发效率,但在使用时仍需注意以下几点:

  1. 可读性:在某些情况下,过于复杂的Lambda表达式可能降低代码可读性。
  2. 状态管理:避免在Lambda表达式中引用外部可变状态,尽可能使用函数式编程思想。
  3. 性能考虑:Lambda表达式在性能方面与匿名内部类相似,但不应在性能敏感的代码中肆意使用。

http://www.ppmy.cn/server/164882.html

相关文章

Linux网络 | 理解运营商与网段划分、理解NAT技术和分片

前言&#xff1a;本节内容结束IP层。 主要带友友们理解一下运营商的作用以及网段划分。 另外也要理解一下分片&#xff0c;什么是分片以及NAT技术。 那么废话不多说&#xff0c; 开始我们的学习吧&#xff01; ps&#xff1a;本节内容友友们最好了解一下IP层的报文哦&#xff0…

使用Express.js和SQLite3构建简单TODO应用的后端API

使用Express.js和SQLite3构建简单TODO应用的后端API 引言环境准备代码解析1. 导入必要的模块2. 创建Express应用实例3. 设置数据库连接4. 初始化数据库表5. 配置中间件6. 定义数据接口7. 定义路由7.1 获取所有TODO项7.2 创建TODO项7.3 更新TODO项7.4 删除TODO项 8. 启动服务器 …

DeepSeek-R1-Distill-Qwen-1.5B 本地部署报错解决

from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer import torch# 加载模型和分词器 model_name "D:\\Algorithm\\DeepSeek-R1-Distill-Qwen-1.5B\\DeepSeek-R1-Distill-Qwen-1.5B" tokenizer AutoTokenizer.from_pretrained(model_nam…

Mac M1 Comfyui 使用MMAudio遇到的问题解决?

问题1: AssertionError: Torch not compiled with CUDA enabled? 解决办法:修改代码以 CPU 运行 第一步:找到 /ComfyUI/custom_nodes/ComfyUI-MMAudio/mmaudio/ext/autoencoder/vae.py文件中的下面这两行代码 self.data_mean = nn.Buffer(torch.tensor(DATA_MEAN_128D, d…

MATLAB中insertBefore函数用法

目录 语法 说明 示例 在子字符串前插入文本 使用模式在文件名前插入文本 在指定位置前插入子字符串 在字符向量中的指定位置前插入文本 insertBefore函数的功能是在指定的子字符串前插入字符串。 语法 newStr insertBefore(str,pat,newText) newStr insertBefore(st…

4 Spark Streaming

4 Spark Streaming 一级目录1. 整体流程2. 数据抽象3. DStream 相关操作4. Spark Streaming 完成实时需求1) WordCount2) updateStateByKey3) reduceByKeyAndWindow 一级目录 Spark Streaming 是一个基于 Spark Core 之上的实时计算框架&#xff0c;可以从很多数据源消费数据并…

【Go - 小顶堆/大顶堆】

在 Go 语言中&#xff0c;标准库 container/heap 提供了堆&#xff08;Heap&#xff09;的实现。可以使用 container/heap 包来实现自己的大顶堆或小顶堆。 小顶堆示例 以下是一个使用 container/heap 包实现的小顶堆示例&#xff1a; package mainimport ("container/…

HTML 符号详解

HTML 符号详解 引言 HTML(超文本标记语言)符号是HTML文档中用来表示特殊字符的标记。这些符号在日常网页设计和开发中扮演着重要角色,特别是在需要显示版权、商标、货币符号等特殊字符时。本文将详细介绍HTML符号的用法、类型以及如何在HTML文档中插入这些符号。 HTML符号…