1.lambda表达式
lambda表达式是jdk1.8中出现的,其作用有:
-
避免匿名内部类定义过多
-
代码简洁
-
减少冗余代码
理解Functional interface(函数式接口)是学习lambda关键所在
函数接口的定义:
-
任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口
public interface Runnable{ public abstract void run(); } -
对于函数式接口,我们可以通过lambda表达式来创建该接口的对象
public class TestLambda1 {
//静态内部类
static class Like2 implements Ilike{
@Override
public void lambda() {
System.out.println("i like lambda2");
}
}
public static void main(String[] args) {
//局部内部类
class Like3 implements Ilike{
@Override
public void lambda() {
System.out.println("i like lambda3");
}
}
//匿名内部类
Ilike like = new Like();
like.lambda();
like = new Like2();
like.lambda();
like = new Like3();
like.lambda();
//匿名内部类,没有类的名称,需要借助接口或者父类来实现
like = new Ilike() {
@Override
public void lambda() {
System.out.println("i like lambda4");
}
};
like.lambda();
//lambda简化
like = ()->{
System.out.println("i like lambda5");
};
like.lambda();
}
}
//定义一个接口
interface Ilike{
void lambda();
}
//实现类
class Like implements Ilike{
@Override
public void lambda() {
System.out.println("i like lambda1");
}
}
对lambda表达式进行简化:
public class TestLambda2 {
static class love2 implements Ilove{
@Override
public void love(int i) {
System.out.println("我喜欢你2---->"+i);
}
}
public static void main(String[] args) {
Ilove l = new love1();
l.love(11);
l = new love2();
l.love(22);
class love3 implements Ilove{
@Override
public void love(int i) {
System.out.println("我喜欢你3---->"+i);
}
}
l = new love3();
l.love(33);
l = new Ilove() {
@Override
public void love(int i) {
System.out.println("我喜欢你4---->"+i);
}
};
l.love(44);
//简化1,去除参数类型
// l = (i)->{
// System.out.println("我喜欢你5---->"+i);
// };
//简化2,去除括号(只能有一个参数才能去除)
l = i->{
System.out.println("我喜欢你5---->"+i);
};
//简化3,去除大括号(只有一行代码才能去除大括号)
l = i->System.out.println("我喜欢你5---->"+i); ;
l.love(55);
}
}
interface Ilove{
void love(int i);
}
class love1 implements Ilove{
@Override
public void love(int i) {
System.out.println("我喜欢你1---->"+i);
}
}









