开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第24 天,点击查看活动详情
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());
}
}