Lambda表达式详解及演变过程

Lambda表达式

λ希腊字母表中排序第十一位的字母,英语名称为:Lambda

作用:

  • 避免内部类定义过多
  • 可以让代码看起来简洁
  • 去掉一些没有意义的代码,只留下核心代码

函数式接口:本质上就是一个接口,但是接口内部只有一个抽象方法,这种借口就叫做函数式接口。

下面演示lambda表达式的演变↓↓↓↓↓↓↓

//以前我们调用一个接口实现类中的方法的过程是这样的

//三个文件,一个接口文件,一个实现类文件,一个主程序文件
public interface SelfIntroduction{
    void speak(String name);
}
public class Person implements SelfIntroduction{
    @Override
    public void speak(String name) {
        System.out.println("我的名字叫作:"+name);
    }
}
public class Application {
    public static void main(String[] args) {
        Person person = new Person();
        person.speak("张三");
    }
}

/*
我们发现,三个文件会占用较多资源,便有了简化方式,将实现类放在主程序文件中,变成静态内部类
*/

//两个文件,一个接口文件,一个主程序文件
public interface SelfIntroduction{
    void speak(String name);
}
public class Application {
    static class Person implements SelfIntroduction{	//静态内部类
        @Override
        public void speak(String name) {
            System.out.println("我的名字叫作:"+name);
        }
    }

    public static void main(String[] args) {
        Person person = new Person();
        person.speak("张三");
    }
}

/*
将实现类文件变为静态内部类后,代码还是不美观,再将其变成成员内部类
*/

//两个文件,一个接口文件,一个主程序文件
public interface SelfIntroduction{
    void speak(String name);
}
public class Application {
    public static void main(String[] args) {

        class Person implements SelfIntroduction{	//成员内部类
            @Override
            public void speak(String name) {
                System.out.println("我的名字叫作:"+name);
            }
        }

        Person person = new Person();
        person.speak("张三");
    }
}

/*
将实现类文件变为主程序文件的成员内部类后,代码依旧不美观,再将其变为匿名内部类
*/

//两个文件,一个接口文件,一个主程序文件
public interface SelfIntroduction{
    void speak(String name);
}
public class Application {
    public static void main(String[] args) {
		//此时这里变为new了一个接口文件,变为匿名内部类
        SelfIntroduction person = new SelfIntroduction() {
            @Override
            public void speak(String name) {
                System.out.println("我的名字叫作:"+name);
            }
        };
        person.speak("张三");
    }
}

/*
此时文件开始变得有些难以理解了,干脆从JDK1.8开始引入Lambda表达式,从而进一步简化
*/

//两个文件,一个接口文件,一个主程序文件
public interface SelfIntroduction{
    void speak(String name);
}
public class Application {
    public static void main(String[] args) {

        SelfIntroduction person = null;
        person = (String name) -> {
            System.out.println("我的名字叫作:"+name);
        };
        person.speak("张三");
    }
}

/*
Lambda表达式已经简化了特别多的代码了,但是还可以进一步简化

这里我们仅仅展示简化代码段,其他的依旧保持不变
*/

//简化1:省略数据类型
person = (name) -> {
    System.out.println("我的名字叫作:"+name);
};

//简化2:省略参数列表的括号
person = name -> {
    System.out.println("我的名字叫作:"+name);
};

//简化3:省略大括号。慎用!!当方法体仅有一行代码时可用
person = name -> System.out.println("我的名字叫作:"+name);


Lambda总结:

  • lambda表达式只有一行代码才能简化为一行,如果有多行,那么就用代码块包裹
  • lambda表达式的使用前提为接口必须为函数式接口,即接口内部只有一个抽象方法。
  • 多个参数也可以去掉参数类型,要去掉就一起都去掉,但是必须加上括号
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值