1、Lambda简介
简介:
Lambda表达式是JDK8的一个新特性,可以取代大部分的匿名内部类,写出更优雅的java代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构;
理解Functional Interface(函数式接口)是学习java8 lambda表达式的关键所在
函数式接口:
函数式接口的定义:
任何接口,如果只包含唯一一个抽象方法,那么他就是一个函数式接口。
// 例子
public interface Runnable{
public abstract void run();
}
ps: 也就是说接口里面只有一个方法就是 函数式接口
ps:jdk 8 中有另一个新特性:default,被default 修饰的方法会有默认实现,不是必须被实现的方法,所以不影响lambda表达式的时候用。
1、Lambda基本语法
实例:
interface Dog{
// 普通方法
void eat();
}
interface Cat{
// 带参数方法
void eat(String foot);
}
interface fish{
// 带参带返回值方法
String eat(String foot);
}
interface Pig{
// 带返回值方法
String eat();
}
实现:
public class TestLambda2 {
public static void main(String[] args) {
// 普通方法
Dog dog = () -> {
System.out.println("狗喜欢吃骨头");
};
dog.eat();
// 带参数方法
Cat cat = (foot) -> {
System.out.println("猫喜欢吃"+foot);
};
cat.eat("猫");
// 带参返回值方法
fish fish = (foot) -> {
System.out.println("鱼喜欢吃"+foot);
return "鱼";
};
fish.eat("蛆");
// 带返回值方法
Pig pig = () ->{
System.out.println("猪吃猪食");
return "猪";
};
pig.eat();
}
}
简化代码:
public class TestLambda2 {
public static void main(String[] args) {
// 简化1、去掉参数类型 多个参数情况下,都不写参数类型
Cat cat = (foot) -> {
System.out.println("狗喜欢吃"+foot);
};
cat.eat("鱼");
// 简化2、简化括号 只有一个参数时可以去掉
fish fish = foot -> {
System.out.println("狗喜欢吃"+foot);
return "1";
};
fish.eat("馒头");
// 简化3、简化花括号 只有一个方法体,并且只有一行语句,则可以省略
Dog dog = () -> System.out.println("够喜欢吃骨头");
dog.eat();
// 简化4、简化花括号 如果是return语句,只有一行返回值,则可以省略;
Pig pig = ()-> "测试";
pig.eat();
}
}