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

第一节: 扯淡
学习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);};

猜你喜欢

转载自blog.csdn.net/gzt19881123/article/details/74755975