lambda
基本介绍
Lambda 表达式是 JDK1.8 开始之后的新技术,是一种代码的新语法,一种特殊写法,lambada 表达式实质上是一个匿名方法,但该方法并非独立执行,而是用于实现由函数式接口定义的唯一抽象方法。
作用:为了简化匿名内部类的代码写法
Lambda 表达式的格式:
(匿名内部类被重写方法的形参列表) -> { //被重写方法的方法体代码 }
Lambda 表达式并不能简化所有匿名内部类的写法,只能简化函数式接口的匿名内部类
简化条件:首先必须是接口,接口中只能有一个抽象方法
@FunctionalInterface 函数式接口注解:一旦某个接口加上了这个注解,这个接口只能有且仅有一个抽象方法
简化方法
Lambda 表达式的省略写法(进一步在 Lambda 表达式的基础上继续简化)
- 如果 Lambda 表达式的方法体代码只有一行代码,可以省略大括号不写,同时要省略分号;如果这行代码是 return 语句,必须省略 return 不写
- 参数类型可以省略不写
- 如果只有一个参数,参数类型可以省略,同时
()
也可以省略
List<String> number = new ArrayList<>(); number.add("a"); number.add("b"); number.add("c"); number.forEach(new Consumer<String>() { @Override public void accept(String s) { System.out.println(s); } }); number.forEach((String s) -> { System.out.println(s); }); number.forEach((s) -> { System.out.println(s); }); number.forEach(s -> { System.out.println(s); }); number.forEach(s -> System.out.println(s) );
常用简化
Comparator
public class CollectionsDemo { public static void main(String[] args) { List<Student> lists = new ArrayList<>() Collections.addAll(lists , s1 , s2 , s3); Collections.sort(lists, new Comparator<Student>() { @Override public int compare(Student s1, Student s2) { return s1.getAge() - s2.getAge(); } }); // 简化写法 Collections.sort(lists ,(Student t1, Student t2) -> { return t1.getAge() - t2.getAge(); }); // 参数类型可以省略,最简单的 Collections.sort(lists ,(t1,t2) -> t1.getAge()-t2.getAge()); } }