本文将深入了解lambda表达式的实现原理和这样的实现方案的取舍权衡。
Java为什么需要lambda表达式?
能够提升代码简洁性、提高代码可读性。
例如,在平时的开发过程中,把一个列表转换成另一个列表或map等等这样的转换操作是一种常见需求。
在没有lambda之前通常都是这样实现的。
List<Long> idList = Arrays.asList(1L, 2L, 3L);
List<Person> personList = new ArrayList<>();
for (long id : idList) {
personList.add(getById(id));
}
代码重复多了之后,大家就会对这种常见代码进行抽象,形成一些类库便于复用。
上面的需求可以抽象成:对一个列表中的每个元素调用一个转换函数转换并输出结果列表。
interface Function {
<T, R> R fun(T input);
}
<T, R> List<R> map(List<T> inputList, Function function) {
List<R> mappedList = new ArrayList<>();
for (T t : inputList) {
mappedList.add(function.fun(t));
}
return mappedList;
}
有了这个抽象,最开始的代码便可以”简化”成
List<Long> idList = Arrays.asList(1L, 2L, 3L);
List<Person> personL