lambda表达式和stream流

Lambda表达式是Python中的一种匿名函数,其结构简单,使用方便,可用于函数式编程,常见于函数式编程库或其他函数式编程语言中。

Lambda表达式的语法形式为:lambda arguments: expression

其中,arguments表示该函数接受的参数,可以是一个或多个。多个参数使用逗号分隔。expression表示该函数的返回值。

Lambda表达式的特点:

  1. 简洁:Lambda表达式可以用很少的代码来实现简单的函数功能。

  2. 速度快:Lambda表达式通常比普通函数执行更快。

  3. 可以作为参数传递:Lambda表达式可以作为参数传递给其他函数。

  4. 内置函数:Python中许多内置函数都支持Lambda表达式作为参数。

  5. 匿名函数:Lambda表达式是一种匿名函数,不需要定义函数名。

  6. 函数式编程:Lambda表达式适用于函数式编程的场景。

Lambda表达式使用示例:

  1. 使用Lambda表达式计算两个数的和:

sum = lambda x, y: x + y

print(sum(2, 3)) # 5

  1. 使用Lambda表达式将列表中的元素进行平方:

lst = 1, 2, 3, 4, 5

result = list(map(lambda x: x**2, lst))

print(result) # 1, 4, 9, 16, 25

  1. 使用Lambda表达式过滤出列表中的偶数元素:

lst = 1, 2, 3, 4, 5

result = list(filter(lambda x: x % 2 == 0, lst))

print(result) # 2, 4

Stream流是Java 8中新引入的一个API,用来对集合进行函数式操作和流水线操作,其本质是一组函数式接口的集合。

Stream流的特点:

  1. 不存储数据:Stream流不是数据结构,而是一种计算过程,不会改变原集合中的元素。

  2. 惰性求值:Stream流的操作不会立即执行,只有当遇到终止操作时才会执行。

  3. 支持并行处理:Stream流可以分成多个部分进行并行操作,提高了处理效率。

Stream的操作分为两类:中间操作和终止操作。

中间操作:

中间操作是对源数据集合的数据进行处理,并返回一个新的Stream流,其中包括过滤数据、映射数据、去重、排序等操作。

常见的中间操作:

  1. filter:过滤符合条件的元素。

  2. map:将一个元素映射为另一个元素。

  3. flatMap:将一个元素映射为多个元素。

  4. distinct:去重。

  5. sorted:排序。

  6. limit:截取前n个元素。

  7. skip:跳过前n个元素。

终止操作:

终止操作是对Stream流中的数据进行处理,返回一个结果或一个副作用,其中包括计数、最大值、最小值、求和、平均值、分组、汇聚等操作。

常见的终止操作:

  1. forEach:对每个元素进行操作。

  2. count:统计元素个数。

  3. max/min:求最大值/最小值。

  4. reduce:对元素进行汇聚。

  5. collect:将Stream流转化为其他数据结构。

Stream流使用示例:

  1. 对一个集合进行筛选:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

Stream<Integer> stream = list.stream(); // 将集合转化成Stream流

stream.filter(n -> n % 2 == 0) // 过滤偶数

.forEach(System.out::println); // 输出2, 4

  1. 统计一个集合中的元素个数:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

Stream<Integer> stream = list.stream(); // 将集合转化成Stream流

long count = stream.count(); // 统计元素个数

System.out.println(count); // 输出5

  1. 求一个集合的平均值:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

Stream<Integer> stream = list.stream(); // 将集合转化成Stream流

OptionalDouble average = stream.mapToInt(Integer::intValue) // 转化成IntStream

.average(); // 求平均值

System.out.println(average.getAsDouble()); // 输出3.0

相关推荐
呱呱复呱呱2 小时前
Django CBV 源码解读:一个请求是怎么找到你的 get() 方法的
python·django
曲幽7 小时前
刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API
python·fastapi·web·translate·goldendict·libretranslate·stardict·pystardict
荣码7 小时前
用Streamlit给AI应用套个界面,10行代码出Web页面
java·python
兵慌码乱16 小时前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理
金銀銅鐵18 小时前
[Python] 体验用欧几里得算法计算最大公约数的过程
python·数学
FreakStudio1 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
用户0332126663671 天前
使用 Python 从零创建 Word 文档
python
Csvn1 天前
Python 两大经典坑点 —— 可变默认参数 & 闭包延迟绑定
后端·python
曲幽1 天前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
用户556918817531 天前
#从脚本到独立程序:Python + Playwright 批量抓取的完整踩坑记录
python·自动化运维