Lambda标准格式
Lambda省去面向对象的条条框框,格式由3个部分组成:
一些参数
一个箭头
一段代码
Lambda表达式的标准格式为:
(参数类型 参数名称) ‐> { 代码语句 }
格式说明:
小括号内的语法与传统方法参数列表一致:无参数则留空;多个参数则用逗号分隔
->是新引入的语法格式,代表指向动作
大括号内的语法与传统方法体要求基本一致
练习:使用Lambda标准格式(无参无返回)
题目
给定一个厨子Cook接口,内含唯一的抽象方法makeFood,且无参数、无返回值。如下:
[Java] 纯文本查看 复制代码
public interface Cook {
void makeFood();
}
在下面的代码中,请使用Lambda的标准格式调用invokeCook方法,打印输出“吃饭啦!”字样:
[Java] 纯文本查看 复制代码
public class Demo05InvokeCook {
public static void main(String[] args) {
// TODO 请在此使用Lambda【标准格式】调用invokeCook方法
}
private static void invokeCook(Cook cook) { cook.makeFood();
}
}
解答
[Java] 纯文本查看 复制代码
public static void main(String[] args) {
invokeCook(() ‐> {
System.out.println("吃饭啦!");
});
}
Lambda的参数和返回值:
下面举例演示java.util.Comparator<T>接口的使用场景代码,其中的抽象方法定义为:
public abstract int compare(T o1, T o2);
当需要对一个对象数组进行排序时, Arrays.sort方法需要一个Comparator接口实例来指定排序的规则。假设有一个Person类,含有String name和int age两个变量。
[Java] 纯文本查看 复制代码
public class Person {
private String name;
private int age;
// 省略构造器、toString方法与Getter Setter
}
传统写法:
[Java] 纯文本查看 复制代码
import java.util.Arrays; import java.util.Comparator;
public class Demo06Comparator {
public static void main(String[] args) {
// 本来年龄乱序的对象数组
Person[] array = {
new Person("古力娜扎", 19),
new Person("迪丽热巴", 18), new Person("马尔扎哈", 20) };
// 匿名内部类
Comparator<Person> comp = new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) { return o1.getAge() ‐ o2.getAge();
}
};
Arrays.sort(array, comp); // 第二个参数为排序规则,即Comparator接口实例
for (Person person : array) { System.out.println(person);
}
}
}
Lambda写法:
[Java] 纯文本查看 复制代码
import java.util.Arrays;
public class Demo07ComparatorLambda { public static void main(String[] args) {
Person[] array = {
new Person("古力娜扎", 19),
new Person("迪丽热巴", 18), new Person("马尔扎哈", 20) };
Arrays.sort(array, (Person a, Person b) ‐> {
return a.getAge() ‐ b.getAge();
});
for (Person person : array) { System.out.println(person);
}
}
}
如果你想了解更多黑马课程,如果你想加入黑马这个大家庭学习先进技术,光交天下好友,那就快来吧!
黑马程序员济南中心联系电话:0531-55696830