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);
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值