【发布时间】:2018-05-04 13:37:06
【问题描述】:
lambda 表达式除了节省代码行数还有其他用处吗?
lambdas 是否提供了任何特殊功能来解决不容易解决的问题?我见过的典型用法是,而不是这样写:
Comparator<Developer> byName = new Comparator<Developer>() {
@Override
public int compare(Developer o1, Developer o2) {
return o1.getName().compareTo(o2.getName());
}
};
我们可以使用 lambda 表达式来缩短代码:
Comparator<Developer> byName =
(Developer o1, Developer o2) -> o1.getName().compareTo(o2.getName());
【问题讨论】:
-
请注意,它可以更短:
(o1, o2) -> o1.getName().compareTo(o2.getName()) -
或更短:
Comparator.comparing(Developer::getName) -
我不会低估这种好处。当事情变得容易得多时,您更有可能以“正确”的方式做事。编写从长远来看更易于维护的代码与在短期内更容易记下的代码之间通常存在一些紧张关系。 Lambda 可以减轻这种压力,从而帮助您编写更简洁的代码。
-
Lambdas 是闭包,这样可以节省更多空间,因为现在您不必在替换类中添加参数化构造函数、字段、赋值代码等。