一
给定一个厨子
Cook
接口,内含唯一的抽象方法
makeFood
请使用
Lambda
的
标准格式
调用
invokeCook
方法,打印输出
“
吃饭啦!
”
字样
public interface Cook {
public abstract void makefood();
}
public class Demo {
public static void main(String[] args) {
//原始的方式是:调用invokeCook方法,传递参数Cook对象,重写makefood方法
invokCook(new Cook(){
@Override
public void makefood(){
System.out.println("吃饭啦");
}
});
//使用Lambda表达式。使用格式直接传递要输出的字样
invokCook(()->{
System.out.println("Lambda吃饭啦");
});
}
public static void invokCook(Cook cook){
cook.makefood();
}
}
二
需求
:
- 使用数组存储多个Person对象
- 对数组中的Person对象使用Arrays的sort方法通过年龄进行升序排序
public class Sort {
public static void main(String[] args) {
Person[] p = {
new Person("张三",38),
new Person("李四",14),
new Person("王五",25)
};
//普通方式 调用数组的sort方法,参数new 一个Comparator重写compare方法 参数前面-后面是升序
Arrays.sort(p,new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o1.getAge()-o2.getAge();
}
});
//遍历数组
for (Person person : p) {
System.out.println(person);
}
System.out.println("-----------------------");
//使用Lambda表达式,传入数组,和参数直接return
Arrays.sort(p, (Person o1, Person o2)->{
return o1.getAge()-o2.getAge();
});
for (Person person : p) {
System.out.println(person);
}
System.out.println("----------------");
//简略Lambda
Arrays.sort(p, (o1,o2)->{
return o1.getAge()-o2.getAge();
});
for (Person person : p) {
System.out.println(person );
}
}
}
三
给定一个计算器
Calculator
接口,内含抽象方法
calc
可以将两个
int
数字相加得到和值
public class Sum {
public static void main(String[] args) {
//普通方式调用 :匿名内部类
invokeCalc(10, 20, new Calculator(){
@Override
public int sum(int a, int b) {
return a+b;
}
});
//Lambda表达式调用
invokeCalc(120, 130, (int a,int b)->{
return a+b;
});
}
/*
定义一个方法
参数传递两个int类型的整数
参数传递Calculator接口
方法内部调用Calculator中的方法calc计算两个整数的和
*/
public static void invokeCalc(int a,int b,Calculator c){
int sum = c.sum(a, b);
System.out.println(sum);
}
}
Lambda表达式注意
/*
* Lambda表达式:是可以推导,可以省略
* 凡是根据上下文推导出来的内容,都可以省略书写
* 可以省略内容:
* 1.(参数列表):括号中参数列表的数据类型,可以省略不写
* 2.(参数列表): 括号中的参数如果只有一个,那么类型和()都可以省略不写
* 3.{一些代码}:如果{}中的代码只有一行,无论是否有返回值,都可以省略{},return,分号 并且3个一起省略,缺一不可
*
* */