Lambda Quick Start笔记
背景
匿名内部类
在java中,如果某些功能实现只在程序中使用一次,那么一般就用匿名内部类来实现。例如在android中view的事件绑定。
而且匿名内部类会引用其外部类的对象,这样就容易造成内存泄露。
另外,匿名内部类看起来很繁杂,不优雅。
但是在java中,使用方法接口(functional interfaces)匿名内部类是一种通行的模式。如Runnable Comparator也是这种方式。现在这些都可以用lambda表达式来替换实现。
Lambda Expression Syntax
Argument List | Arrow Tocken | Body |
---|---|---|
(int x,inty) | -> | x + y |
常用使用场景
- 变量声明
- 赋值
- 返回语句
- 数组初始化
- 方法或构造函数参数
- lambda表达式体
- 条件判断
- 转型语句
用lambda表达式改善代码
lambda表达式对“Don't Repeat Yourself”原则提供了更好的支持,使得我们的代码更简洁,可读性更高
一个常见的条件过滤用例
一个常见的用例就是从一个集合中找出符合某特定条件的子集。
下面这个例子我们需要在美国分出三个组的人:
- Drivers 年龄大于16岁
- Draftee 18-25岁的男性
- pilots 23-65
代码
https://github.com/nanhuaqq/LambdaLearn
java.util.function包介绍
Predicate不是java8提供的唯一功能接口,除了它还有如下功能接口
- Predicate 携带一个属性 并把自己作为参数 传递给调用者。
- Consumer 执行一个行为 并把自己作为参数 传递给调用者。
- Function 转型行为 ,把T转变成U
- Supplier 提供实例 类似工厂
- UnaryOperator 一元操作 T -> T
- BinaryOperator 二元操作 (T,T)->T
网友评论