感觉从狭义的使用目的来说,lambda表达式就是为了简化某些匿名内部类,当然不是所有的匿名内部类都能被简写。也就是你想要某些返回值作为参数不用去显示的写调用方法或者传参,具体来看看下面的例子。
// Java7及以前假设想要排序List的方式,需要你调用Collections接口并且传一个比较器的
ArrayList<String> list = new ArrayList<>(Arrays.asList("I", "love", "you", "too"));
Collections.sort(list, new Comparator<String>(){
@Override
public int compare(String str1, String str2){
return str1.length()-str2.length();
}
});
// 尽管匿名内部类不太用去外面定义一个class xxxComparator,有点简化了,但还是不够简单
// lambda表达式对此进一步进行了简化,同时Java8还支持了直接List.sort()
ArrayList<String> list = new ArrayList<>(Arrays.asList("I", "love", "you", "too"));
list.sort((str1, str2) -> str1.length()-str2.length());
具体的语法实际上就是->前面是传参,假设无参就是(),只有一个参数可以省略括号,多个参数就(a, b, c)。->后面是执行代码。
进一步的写法还可以用::代替一些->,这是Java 8中的Lambda表达式写法之一,借鉴了一下