Java8 lambda表达式

  lambda表达式是Java8中的一个重大的新特性,它提供了简洁明了的形式来表达一个接口中的方法。
  比如如果想要写一个监听器的话,其步骤为,我先写一个Handler接口,然后被监听者里面要有Handler接口的对象,然后写上Handler接口的setter方法,最后,监听者得到被监听者的对象后,设置其Handler对象:

  下面我以Spring MVC的一个例子做讲解,这个例子是得到传入Controller的请求:


@Controller
public class LambdaController {

    private OnRequestHandler onRequestHandler;

    @ResponseBody
    @RequestMapping(value = "/testLambda")
    public String testRequest(){
        onRequestHandler.onRequest();
        return "testLambda";
    }

    public void setOnRequestHandler(OnRequestHandler onRequestHandler) {
        this.onRequestHandler = onRequestHandler;
    }

    public interface OnRequestHandler {
        void onRequest();
    }
}

现在写一个监听者,要来监听Controller的请求事件:

@Component
public class RequestHandler{

    @Autowired
    private LambdaController lambdaController;

    @PostConstruct
    public void init() {
        lambdaController.setOnRequestHandler(new LambdaController.OnRequestHandler() {
            @Override
            public void onRequest() {
                System.out.println("RequestHandler接收到了请求");
            }
        });
    }
}

可以看到里面最关键的代码:
lambdaController.setOnRequestHandler(
new LambdaController.OnRequestHandler() {
            @Override
            public void onRequest() {
                System.out.println("RequestHandler接收到了请求");
            }
});

我只想在收到请求的时候输出一行语句,但是却一共写了5行语句,只有一行是有用的,所以这时候就可以使用lambda表达式。

lambda表达式可以极大的简化上述写法:
这样写:
lambdaController.setOnRequestHandler(()-> System.out.println("RequestHandler接收到了请求"));

此为无参无返回值的情况,那么有参有返回值的情况为:

比如我要测试一下回调收到请求的参数,并且根据回调方法返回的值来进行判断,下面以写一个判断是否成年的接口来做测试:
现在写一下判断的接口:
    public interface OnJudgeHandler {
        boolean onAdultJudge(String name,Integer age);
    }

然后RequestHandler再去实现这个接口:
@Component
public class RequestHandler{

    @Autowired
    private LambdaController lambdaController;

    @PostConstruct
    public void init() {
        lambdaController.setOnRequestHandler((name, age)->{
            System.out.println("RequestHandler接收到了请求,其中请求的参数为---"+ name +"---"+age);
            if (age >= 18) {
                return true;
            } else {
                return false;
            }
        });
    }
}

其中,Controller回调接口的方法为:
@Controller
public class LambdaController {

    private OnJudgeHandler onRequestHandler;

    @ResponseBody
    @RequestMapping(value = "/judgeAge")
    public String testRequest(String name, Integer age){

        boolean isAdults = onRequestHandler.onAdultJudge(name, age);
        if (isAdults) {
            return name+" is adults" +
                    "";
        } else {
            return name+" not adults";
        }
    }

    public void setOnRequestHandler(OnJudgeHandler onRequestHandler) {
        this.onRequestHandler = onRequestHandler;
    }

    public interface OnJudgeHandler {
        boolean onAdultJudge(String name,Integer age);
    }

}
可以看到,LambdaController当收到请求的信息之后,会调用回调的方法,然后在回调方法中对传入的参数进行处理。

当有参数的时候,函数体标准为(xx,xx) -> {  }


此项目的地址为例子

项目的测试地址为 http://localhost:8080/judgeAge?name=happyheng&age=13


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值