lambda表达式入门
使用lambda表达式的条件:必须是函数式接口
什么是函数式接口?
简单来说, 就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。
interface Animal{
void eat(String name);
}
通过代码方式一步一步推导出lambda表达式如何简化来的
public class Demo01 {
/**
* 静态内部类
*/
static class Dog2 implements Animal{
@Override
public void eat(String name) {
System.out.println(name+"正在吃东西……");
}
}
public static void main(String[] args) {
//1.正常的实现类方式
Animal dog = new Dog();
dog.eat("小花");
//2.使用静态内部类方式
dog = new Dog2();
dog.eat("翠花");
/**
* 3.局部内部类
*/
class Dog3 implements Animal{
@Override
public void eat(String name) {
System.out.println(name+"正在吃东西……");
}
}
//3.使用局部内部类
dog = new Dog3();
dog.eat("辣手摧花");
//4.使用匿名内部类
dog = new Animal() {
@Override
public void eat(String name) {
System.out.println(name+"正在吃东西……");
}
};
dog.eat("白菜花");
//5.使用lambda表达式
dog = (String name)->{
System.out.println(name+"正在吃东西……");
};
dog.eat("韭菜花");
//5.1 lambda表达式简写,如果只有一个参数,则可以省略参数类型以及();如果代码块只有一行语句,则可以省略{}
dog = name-> System.out.println(name+"正在吃东西……");
dog.eat("韭菜花");
}
}
/**
* 最传统的实现类
*/
class Dog implements Animal{
@Override
public void eat(String name) {
System.out.println(name+"正在吃东西……");
}
}
interface Animal{
void eat(String name);
}
运行结果
小花正在吃东西……
翠花正在吃东西……
辣手摧花正在吃东西……
白菜花正在吃东西……
韭菜花正在吃东西……
韭菜花正在吃东西……
总结:
1. 如果方法入参只有一个参数,则可以省略参数类型以及();否则不能省略()
interface Animal{
void eat(String name);//一个入参
}
2. 如果方法体只有一行代码执行,则可以省略{};否则不能省略
dog = name-> System.out.println(name+"正在吃东西……");//省略了参数类型以及()
dog.eat("韭菜花");
3. 如果有多个入参,参数类型也可以省略,如果省略则必须都省略,这时必须使用()包裹入参
interface Animal{
void eat(String name,int age);//多个入参
}
dog = (name,2)-> System.out.println(name+"正在吃东西……");