资料参考自 菜鸟教程 https://www.runoob.com/java/java8-new-features.html
之前对这个lambda的理解一直很模糊,相关概念也很多,虽然项目中经常用到,而且idea会提示,如把
private void sortUsingJava7(List<String> names){
Collections.sort(names, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.compareTo(s2);
}
});
}
// 使用 java 8 排序
private void sortUsingJava8(List<String> names){
Collections.sort(names, (s1, s2) -> s1.compareTo(s2));
}
排序的方法自动让你优化为lambda表达式形式
lambda最核心的就是允许把函数作为一个方法的参数传入到方法中,其实就相当于传入了这个接口的一个你自定义的默认实现方法,如图:
使用注意的地方是:
1.lambda 表达式只能引用标记了 final 的外层局部变量,不能修改
2.lambda 表达式的局部变量可以不用声明为 final,但是必须不可被后面的代码修改(即隐性的具有 final 的语义)
3.函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。
函数式接口可以被隐式转换为 lambda 表达式