第一节: 扯淡
学习java8中的Streams库一个目的就是采用最佳低级执行机制避免用synchronized编写代码。Java 8可以透明地把输入的不相关部分拿到几个CPU内核上去分别执行你的代码。Stream操作流水线——这是几乎免费的并行,用不着去费劲搞Thread了。
使用Java 8,你就是在保护你作为Java程序员的职业生涯^_^.
第二节: 函数式接口
函数式接口的概念:只定义一个抽象方法的接口
用函数式接口可以干什么呢? Lambda表达式允许你直接以内联的形式为函数式接口的抽象方法提供实现,并把整个表达式作为函数式接口的实例,这个实例就是函数式接口一个具体实现。
举例说明:定义一个只有一个方法的接口,实现该接口打印字符串”Hello !”
第一步定义接口
@FunctionalInterface // 作用类似于 @Overried 表示只能有一个接口
public interface ShowMsg {
void printMSG();
}
第二步实现接口
public class ShowMsgHello implements ShowMsg {
@Override
public void printMSG() {
System.out.println("Hello !");
}
}
第三部创建类的对象,调用对象方法
public static void main(String[] args) {
ShowMsg show = new ShowMsgHello();
show.printMSG();
}
如果采用Lambda表达式则可以不用定义实现类,直接一行代码即可:
public static void main(String[] args) {
ShowMsg show = () -> System.out.println("Hello !");
show.printMSG();
}
主要看操作符“->”请不要把它看成类似于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);};