天天看点

一、JAVA8学习笔记 Lambda表达式快速入门

一、扯淡 Why Java8 Streams?

二、What is 函数式接口 ?

三、总结

为什么要学习java8 流技术 、Lambda 表达式等 ?

一个很好的目的就是:

希望最简单的并发执行你的程序,且避免用 Synchronized控制线程安全。

采用Stream技术,再也用不着去费劲搞Thread多线程了。

使用Java 8,你就是在保护你作为Java工程师的职业生涯 _

函数式接口的概念:只定义一个抽象方法的接口

用函数式接口可以干什么呢? Lambda表达式最喜欢函数式接口!

举例说明:定义一个只有一个方法的接口,实现该接口打印字符串"Hello !"

第一步 定义接口

注解 @FunctionalInterface 的作用类似于 @Overried, 表示限制只能有一个接口

第二步 实现接口

第三步 测试接口

第三步 换一种方式测试接口

如果采用Lambda表达式则可以不用定义实现类,直接一行代码即可:

主要看操作符 “->” , 请不要把它看成类似于C++里面的指针什么的,

通俗讲它就是一个分割符,分割函数参数部分和函数体部分。

整个 “() -> System.out.println(“Hello !”) ”这段代码其实就是接口ShowMsg的匿名类实例对象。

针对其他类别的抽象方法的处理如下:

(1)如果接口方法是:void printMsg(String msg);

则 Lambda表达式:(msg) -> System.out.println(msg);

或者:msg -> System.out.println(msg); // 单个参数可以舍弃参数两边的”(”和”)” ,多个参数则必须有两边的”(”和”)”。

(2)如果接口方法是:String printMsg( );

则Lambda表达式:() -> “Hello !”; // 这里无需 return 关键字

(3)如果函数体内语句多个则需要“{}”

Lambda表达式:() -> {String msg = “Hello !”; System.out.println(msg);};

函数式接口就是只定义一个抽象方法的接口

Lambda表达式可直接作为一个函数式接口的匿名实现类对象(一个实实在在的Java实体对象)

没有java8之前也有很多函数式接口:

Comparator 和 Runnable 都是耳熟能详的老接口了。

没有Lambda的年代采用匿名内部类:

看上去很笨拙

进入 Lambda 的时代:

是否让你感觉很简洁 ?

Over …