Java8 lambda表达式
来源:互联网 发布:文件夹整理软件 编辑:程序博客网 时间:2024/04/28 14:51
lambda表达式是Java8中的一个重大的新特性,它提供了简洁明了的形式来表达一个接口中的方法。
比如如果想要写一个监听器的话,其步骤为,我先写一个Handler接口,然后被监听者里面要有Handler接口的对象,然后写上Handler接口的setter方法,最后,监听者得到被监听者的对象后,设置其Handler对象:
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当收到请求的信息之后,会调用回调的方法,然后在回调方法中对传入的参数进行处理。
比如如果想要写一个监听器的话,其步骤为,我先写一个Handler接口,然后被监听者里面要有Handler接口的对象,然后写上Handler接口的setter方法,最后,监听者得到被监听者的对象后,设置其Handler对象:
下面我以Spring MVC的一个例子做讲解,这个例子是得到传入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
- Java8 Lambda表达式教程
- Java8 Lambda表达式教程
- Java8: Lambda表达式语法
- java8 Lambda表达式
- Java8 Lambda表达式教程
- Java8 Lambda表达式
- java8 Lambda表达式
- Java8 Lambda表达式教程
- Java8 Lambda表达式教程
- Java8 Lambda表达式教程
- java8 lambda表达式-语法
- java8 lambda表达式-其他
- java8 lambda表达式
- Java8 Lambda表达式入门
- Spark/Java8 lambda表达式
- Java8 Lambda表达式教程
- Java8 lambda表达式
- Java8 Lambda表达式教程
- const 限定符、const引用、const指针,顶层const和底层const
- MySQL 外键
- 防止JS路径跳转地址栏带参数
- js闭包
- 收起与展开效果
- Java8 lambda表达式
- Android Stduio统计项目的代码行数
- Struts2中的OGNL详解
- AVD问题 Could not initialize emulated framebuffer
- HDU2795 Billboard(线段树)
- Spring中配置Quartz的过程;Spring与Quartz的兼容问题
- WebService CXF学习(进阶篇2):对象传递
- SQLServer数据库基础-查询笔记(一)
- 理解四元素