Lambda表达式(二十)
Lambda表达式(二十)
lambda表达式使用的前提:实现的接口是一个函数式接口(即接口中只定义一个抽象方法)
下面我面在推导下lambda表达式的使用过程
现在我们有一个Run接口,接口中定义了一个running方法,如下
interface Run {
void running(int away);
}
Level 1
第一个阶段,我们使用常用类继承Run接口,重写running方法,最后在main方法中调用,如下:
package com.lambda;
interface Run {
void running(int away);
}
class Runner implements Run {
@Override
public void running(int away) {
System.out.println("跑了"+away+"米。");
}
}
public class TestLambda {
public static void main(String[] args) {
Run r1 = new Runner();
r1.running(100);
}
}
Level 2
第二个阶段,我们将定义的Running类写到Testlambda内部,将其实现为静态内部类,如下:
package com.lambda;
interface Run {
void running(int away);
}
public class TestLambda {
static class Runner implements Run {
@Override
public void running(int away) {
System.out.println("跑了"+away+"米。");
}
}
public static void main(String[] args) {
Run r1 = new Runner();
r1.running(100);
}
}
Level 3
第三个阶段,继续简化,省略掉Runner类的名字,直接定义接口中的running方法,实现为匿名内部类,如下:
package com.lambda;
interface Run {
void running(int away);
}
public class TestLambda {
public static void main(String[] args) {
Run r1 = new Run() {
@Override
public void running(int away) {
System.out.println("跑了"+away+"米。");
}
};
r1.running(100);
}
}
Level 4
在level 3的基础上,进一步简化,lambda表达式就登场了,将匿名内部类的new关键字和方法定义简化如下,只保留方法的参数和实现的方法体。
package com.lambda;
interface Run {
void running(int away);
}
public class TestLambda {
public static void main(String[] args) {
Run r1 = (int away) -> {
System.out.println("跑了"+away+"米。");
};
r1.running(100);
}
}
现在的代码结构与Level 1相比是不是简洁了很多!其实在这个基础上,还可以再精简一点,如果要执行的代码只有一行,可以将代码块的括号{}去掉,参数只有一个的话,还可以将参数的括号()去掉,最终变成下面的样子:
package com.lambda;
interface Run {
void running(int away);
}
public class TestLambda {
public static void main(String[] args) {
Run r1 = away -> System.out.println("跑了"+away+"米。");
r1.running(100);
}
}