JDK8新特性——lambda表达式

package zcl.jdk8.lambda;

/**
 * 使用 Lambda 表达式可以使代码变的更加简洁紧凑。
 * 参考学习文档:https://www.runoob.com/java/java8-lambda-expressions.html
 */
public class TestMain4Lambda {

    /*
     一、lambda的标准格式为:

    (Object obj)-> {
        doSomeThing();
        return result;
    }

    二、为了简化语法,lambda可以省略一些语句,省略规则为:
     a. 小括号中的参数类型可以省略。
     b. 如果小括号中只有一个参数,那么可以省略 小括号。
     c. 如果大括号中只有一条语句,那么可以省略 大括号、return、分号

     三、lambda的使用前提:
     a. 必须有接口(不能是抽象类),接口中有且仅有一个需要被重写的抽象方法。
     b. 必须支持上下文推导,要能够推导出来 Lambda 表达式表示的是哪个接口中的内容。

     四、使用场景:
     a. 可以使用接口当做参数,然后传递 Lambda 表达式(常用)
     b. 可以将 Lambda 表达式赋值给一个接口类型的变量
     **/

    public static void main(String[] args) {
        /*
          使用场景a示例:可以使用接口当做参数,然后传递 Lambda 表达式(常用)
         */
        SceneA sceneA = new SceneA();
        sceneA.setName("Johny");
        sceneA.setId(123);
        //jdk7
        sceneA.getInfo(new ILambdaTest() {
            @Override
            public Object test(String name, Integer id) {
                return name+"," +id;
            }
        });

        // jdk8标准写法
        sceneA.getInfo((String name, Integer id) -> {
            return name+"," +id;
        });

        // jdk8简化写法
        sceneA.getInfo((name, id)-> name+"," +id);

        // 常见案例
        new Thread(() -> System.out.println("线程启动了")).start();

        /*
          使用场景b示例:可以将 Lambda 表达式赋值给一个接口类型的变量
         */

        // 标准写法
        ILambdaTest getInfo = (String name, Integer id) -> {
            return name+"," +id;
        };

        // 简化写法
        ILambdaTest getInfoSimple = (name, id)-> name+"," +id;

        System.out.println(getInfo.test("viga", 456));
        System.out.println(getInfoSimple.test("viga", 456));
    }

}
package zcl.jdk8.lambda;

public interface ILambdaTest {

    // 不能是抽象类,必须是接口,有且仅有一个抽象方法
    Object test(String name, Integer id);
}
package zcl.jdk8.lambda;

import lombok.Data;

@Data
public class SceneA {

    private String name;

    private Integer id;

    public Object getInfo(ILambdaTest iLambdaTest){
        System.out.println("info-" + name + "," + id);
        return iLambdaTest.test(name, id);
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章