1、 为什么要使用Lambda表达式
- 避免匿名内部类定义过多
- 可以使代码更加简洁
- 去掉了一堆没用意义的代码,只留下核心的逻辑
2、 什么是函数式接口
- 函数式接口(Functional Interface) 是学习Java8 Lambda表达式的关键接口
- 函数式接口的定义:
- 任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口
public interface Runnable{ public abstract void run(); }
- 对于函数式接口,我们可以通过Lambda表达式创建该接口的对象
3、 各种方法对比
- 传统方式
public class TestLambda1 {
public static void main(String[] args) {
ILove love = new Love();
love.love(1);
}
}
// 函数式接口
interface ILove{
void love(int a);
}
// 实现类
class Love implements ILove{
@Override
public void love(int a) {
System.out.println("I love you ==>" + a);
}
}
- 静态内部类
public class TestLambda1 {
// 实静态内部类
static class Love implements ILove{
@Override
public void love(int a) {
System.out.println("I love you ==>" + a);
}
}
public static void main(String[] args) {
ILove love = new Love();
love.love(2);
}
}
// 函数式接口
interface ILove{
void love(int a);
}
- 局部内部类
public class TestLambda1 {
public static void main(String[] args) {
// 局部内部类
class Love implements ILove{
@Override
public void love(int a) {
System.out.println("I love you ==>" + a);
}
}
ILove love = new Love();
love.love(3);
}
}
// 函数式接口
interface ILove{
void love(int a);
}
- 匿名内部类
public class TestLambda1 {
public static void main(String[] args) {
// 匿名内部类
ILove love = new ILove() {
@Override
public void love(int a) {
System.out.println("I love you ==>" + a);
}
};
love.love(5);
}
}
// 函数式接口
interface ILove{
void love(int a);
}
- Lambda表达式
public class TestLambda1 {
public static void main(String[] args) {
// Lambda表达式
ILove love = (int a) -> {
System.out.println("I love you ==>" + a);
};
love.love(6);
}
}
// 函数式接口
interface ILove{
void love(int a);
}
- Lambda表达式进一步简化(去掉参数类型)
public class TestLambda1 {
public static void main(String[] args) {
// Lambda表达式
ILove love = (a) -> {
System.out.println("I love you ==>" + a);
};
love.love(666);
}
}
// 函数式接口
interface ILove{
void love(int a);
}
- Lambda表达式再进一步简化(去掉括号)
public class TestLambda1 {
public static void main(String[] args) {
// Lambda表达式
ILove love = a -> {
System.out.println("I love you ==>" + a);
};
love.love(666);
}
}
// 函数式接口
interface ILove{
void love(int a);
}
- Lambda表达式再进一步简化(去掉花括号)
public class TestLambda1 {
public static void main(String[] args) {
// Lambda表达式
ILove love = a -> System.out.println("I love you ==>" + a);
love.love(666);
}
}
// 函数式接口
interface ILove{
void love(int a);
}
3、 总结
- 前提是接口为函数式接口
- Lambda表达式只能有一行代码情况下才能简化成为一行,如果有多行,那么就用代码块( { } )包裹
- 多个参数也可以去掉参数类型,要去就必须都去掉,但是必须加上括号