格式
service.submit(() -> System.out.println(Thread.currentThread().getName()));
/*
() -> System.out.println(Thread.currentThread().getName())
Lambda表达式
() 参数列表
-> 做什么事情,就是对应方法体
箭头之后的代码就是正常语句
(参数列表) -> {代码语句}
*/
Lambda表达式使用,无参数无返回值
*
* 无参数无返回值
*/
interface Cook {
void cooking();
}
public class Demo1 {
public static void main(String[] args) {
invokeCook(new Cook() {
@Override
public void cooking() {
System.out.println("麻辣香锅,孜然肉片,土豆牛肉,蒜薹肉丝");
}
});
invokeCook(() -> {
System.out.println("蒜蓉油麦菜,番茄鸡蛋");
});
invokeCook(() -> System.out.println("明天早上自己炸油条"));
}
/**
* 执行Cook实现类对象方法
*
* @param cook Cook接口的实现类对象
*/
public static void invokeCook(Cook cook) {
cook.cooking();
}
}
Lambda表达式使用,有参数有返回值
import java.util.Arrays;
import java.util.Comparator;
public class Demo2 {
public static void main(String[] args) {
Person[] persons = {
new Person("骚磊", 16),
new Person("老黑", 50),
new Person("老付", 40),
new Person("污云", 35),
new Person("朋朋", 14),
new Person("大哥", 18),
};
// public static <T> void sort(T[] a, Comparator<? super T> c)
Arrays.sort(persons, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o1.getAge() - o2.getAge();
}
});
/*
* 1. 有参数
* 2. 有返回值
*
* (Person o1, Person o2) -> {
* return o1.getAge() - o2.getAge();
* }
* 标准Lambda
*/
Arrays.sort(persons, (Person o1, Person o2) -> {
return o2.getAge() - o1.getAge();
});
/*
* 1. 这里可以省略数据类型
* 2. 可以直接利用返回值,{}和return都省了掉
*/
Arrays.sort(persons, (o1, o2) -> o2.getAge() - o1.getAge());
for (Person person : persons) {
System.out.println(person);
}
}
}
Lambda表达式使用前提:
1. 有且只有一个缺省属性为public abstract方法的接口,例如 Comparator<T>接口,Runnable接口
2. 使用lambda表达式是有一个前后要求约束的
方法的参数为接口类型,或者说局部变量使用调用方法,可以使用lambda也OK
3. 有且只有一个抽象方法的接口,称之为【函数式接口】