一、扯淡 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 …