Lambda 的格式:
() 参数
-> 箭头
{} 重写代码
例子1:
public static void main(String[] args) {
/*
* java 1.8之前我们定义的匿名类方式
*/
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Before Java8");
}
}).start();
/*
* java 1.8之后我们使用的新方法
* 使用lambda表达式替换匿名类,而实现Runnable接口是匿名类的最好示例。通过() -> {}代码块替代了整个匿名类。
*/
new Thread(() -> System.out.println("Before Java8")).start();
}
注意:
Lambda表达式只支持函数式接口。也就是只有一个抽象方法的接口
例子2:
package demo1;
public class Person {
private String name;
private int age;
Person(){
}
Person(String name,int age){
this.name = name;
this.age = age;
}
public String toString() {
return "Person: "+ name + " "+age;
}
String getName() {
return name;
}
int getAge() {
return age;
}
}
匿名内部类
package demo1;
import java.util.Arrays;
import java.util.Comparator;
public class myDemo11 {
public static void main(String[] args) throws Exception {
Person[] arr = {
new Person("A",10),
new Person("B",8),
new Person("C",12),
new Person("D",9)
};
Arrays.sort(arr,new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o1.getAge() - o2.getAge();
}
});
for(Person p:arr) {
System.out.println(p);
}
}
}
Lambda
package demo1;
import java.util.Arrays;
import java.util.Comparator;
public class myDemo11 {
public static void main(String[] args) throws Exception {
Person[] arr = {
new Person("A",10),
new Person("B",8),
new Person("C",12),
new Person("D",9)
};
Arrays.sort(arr,(Person o1,Person o2)->{
return o1.getAge() - o2.getAge();
});
for(Person p:arr) {
System.out.println(p);
}
}
}
运行结果:
Person: B 8
Person: D 9
Person: A 10
Person: C 12