Lambda

本文深入探讨Java 8中引入的Lambda表达式和Stream API,解释它们如何简化集合操作,包括创建线程、排序等功能。通过实例展示Lambda表达式如何替代功能接口,以及Stream如何增强集合库,支持map、filter等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Lambda表达式的本质只是一个"语法糖",由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能。本人建议不要乱用,因为这就和某些很高级的黑客写的代码一样,简洁,难懂,难以调试,维护人员想骂娘。**lambda表达式允许你通过表达式来代替功能接口。**lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。

Lambda表达式还增强了集合库。 Java SE 8添加了2个对集合数据进行批量操作的包: java.util.function 包以及java.util.stream 包。 流(stream)就如同迭代器(iterator),但附加了许多额外的功能。

基本语法:
(parameters) -> expression

(parameters) ->{ statements; }

应用:
**常规操作:**创建线程,排序等功能

使用Lambdas和Streams
Stream是对集合的包装,通常和lambda一起使用。 使用lambdas可以支持许多操作,如 map, filter, limit, sorted, count, min, max, sum, collect 等等。 同样,Stream使用懒运算,他们并不会真正地读取所有数据,遇到像getFirst() 这样的方法就会结束链式语法。
流操作分为中间操作和终结操作,这两种操作外加数据源就构成了所谓的pipeline,处理管道。
中间操作是懒的,中间操作在pipeline执行到终结操作之前是不会开始执行的。行到终结操作的时候我就要开始遍历数据源并且执行中间操作这个过程了,不会再去等谁了。而且一旦pipeline中的终结操作完成了,那么这个pipeline的使命就完成了,如果你还有新的终结操作,那么对不起,这个旧的pipeline就用不了了,你得新建一个stream。

把Collection切换成管道源很简单,调用stream()就行了。

heros.stream()

但是数组却没有stream()方法,需要使用

Arrays.stream(hs)
或者
Stream.of(hs)

Consumer接口表示一个接受单个输入参数并且没有返回值的操作
Predicate判断输入的对象是否符合某个条件

Consumer<Person> giveRaise = e -> e.setSalary(e.getSalary() / 100 * 5 + e.getSalary());  
Predicate<Person> ageFilter = (p) -> (p.getAge() > 25); 

好文章:https://www.cnblogs.com/franson-2016/p/5593080.html
pipeline:https://www.cnblogs.com/heimianshusheng/p/5674372.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值