java8 lambda表达式实现自定义用户组件,Don't Repeat Yourself
2019独角兽企业重金招聘Python工程师标准>>>
一、用户组件的功能
使用java8 lambda表达式实现实现世界的一个例子:用户组件。此用户组件有以下几个操作:获取用户列表,获取单个用户,增加用户,删除用户,更新用户。所有的操作都是使用UserRequest对象并返回一个UserResponse对象。
在各个操作中,需要在方法执行前进行请求合法性验证,方法执行后进行特殊的响应处理,检查所有的响应特性
执行日志记录或其他操作。
在原来的处理方式中,需要在每个操作中都把要执行的请求方法包括在至少一个try-catch语句块中。在java8中,可以创建一个的方法统一处理方法执行前后的操作,如源代码中的callComponent方法,使代码更加简单,更少的代码重复。
二、代码样例
1.定义一个用户类User
2.定义用户组件的接口UserComponent,UserRequest,UserResponse
3.使用lambda表达式实现用户组件的接口UserComponentImpl
4.实现Adapter类UserComponentAdapter
5.创建测试类UserComponentTest
public class User {Integer id;String name;Integer age;User() {}User(int id, String name, int age) {this.id = id;this.name=name;this.age = age;}public String toString() {return "" + id + "-" + name + "-" + age;}
}
public interface UserComponent {UserResponse fetchAllUsers(UserRequest req);UserResponse fetchUser(UserRequest req);UserResponse deleteUser(UserRequest req);UserResponse updateUser(UserRequest req);UserResponse insertUser(UserRequest req);
}
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;public class UserComponentImpl implements UserComponent {List<User> users = new ArrayList<User>();public UserResponse fetchAllUsers(UserRequest req) {return new UserResponse(users);}public UserResponse fetchUser(UserRequest req) {return new UserResponse(users.stream().filter(u -> u.id.equals(req.user.id)).collect(Collectors.toList()));}public UserResponse deleteUser(UserRequest req) {users = users.stream().filter(u -> (!u.id.equals(req.user.id))).collect(Collectors.toList());return new UserResponse(true);}public UserResponse updateUser(UserRequest req) {List<User> list = users.stream().filter(u -> u.id.equals(req.user.id)).collect(Collectors.toList());if (list.size() > 0) {User user = list.get(0);user.name = req.user.name;user.age = req.user.age;return new UserResponse(true);}return new UserResponse(false);}public UserResponse insertUser(UserRequest req) {users.add(req.user);return new UserResponse(true);}
}
import java.io.IOException;
import java.util.List;
import java.util.function.Function;public class UserComponentAdapter {UserComponent uc = new UserComponentImpl();UserResponse callComponent(UserRequest request,Function<UserRequest, UserResponse> func) {try {// 验证请求的合法性UserResponse response = func.apply(request);// 特殊的响应处理,检查所有的响应特性// 执行日志记录和/或其他操作return response;} catch (Exception e) {e.printStackTrace();// 进行异常处理return new UserResponse(true);}}List<User> fetchAllUsers() throws IOException {return callComponent(new UserRequest(), uc::fetchAllUsers).users;}User fetchUser(Integer id) throws IOException {return callComponent(new UserRequest(new User(id, "", 0)),uc::fetchUser).users.get(0);}boolean deleteUser(Integer id) throws IOException {return callComponent(new UserRequest(new User(id, "", 0)),uc::deleteUser).success;}boolean updateUser(User user) throws IOException {return callComponent(new UserRequest(user), uc::updateUser).success;}boolean insertUser(User user) throws IOException {return callComponent(new UserRequest(user), uc::insertUser).success;}
}
import java.io.IOException;public class UserComponentTest {public static void main(String[] args) throws IOException {UserComponentAdapter uca = new UserComponentAdapter();uca.insertUser(new User(1, "张三", 12));uca.insertUser(new User(2, "李四", 21));uca.insertUser(new User(3, "王五", 32));uca.insertUser(new User(4, "赵六", 43));System.out.println(uca.fetchAllUsers());System.out.println(uca.fetchUser(2));System.out.println(uca.updateUser(new User(3, "王五五", 55)));System.out.println(uca.deleteUser(4));System.out.println(uca.fetchAllUsers());}
}
public class UserRequest {User user;public UserRequest() {}public UserRequest(User user) {this.user = user;}
}
import java.util.List;public class UserResponse {List<User> users;boolean success = true;public UserResponse(boolean success) {this.success=success;}public UserResponse(List<User> users) {this.users = users;}
}
三、参考资料
http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html.
http://www.dreamsyssoft.com/java-8-lambda-tutorial/
转载于:https://my.oschina.net/cloudcoder/blog/215113
java8 lambda表达式实现自定义用户组件,Don't Repeat Yourself相关推荐
- Java8————Lambda表达式(二)
译者注:文中内容均来自于官方教程<Lambda Expressions>,但是由于英汉语言的差异,部分语句官方描述过于冗余,因此译者根据通常状况的理解做了微调,但不会影响表达的含义.比如: ...
- lambda 对象去重_采用java8 lambda表达式 实现 java list 交集 并集 差集 去重复并集...
采用java8 lambda表达式 实现java list 交集/并集/差集/去重并集 一般的javaList 交.并集采用简单的 removeAll retainAll 等操作,不过这也破坏了原始的 ...
- lambda学习视频和stream学习视频(Java8 Lambda表达式视频教程)-Java爬虫-网络购物的正确打开方式
百度网盘 链接:https://pan.baidu.com/s/1upU5EVXOQeho6poDYdnhiQ 提取码:088l Java8 Lambda表达式视频教程 https://www.bil ...
- Java8 lambda表达式,Comparator.comparing().thenComparing()报错
环境 Java:1.8+ 前言 今天发了一个问题: 问题描述: 对List进行排序,如果在Comparator.comparing()方法中,只使用一个字段排序,没有问题. 但是如果使用多字段排序,并 ...
- 采用java8 lambda表达式 实现 java list 交集 并集 差集 去重复并集
采用java8 lambda表达式 实现java list 交集/并集/差集/去重并集 一般的javaList 交.并集采用简单的 removeAll retainAll 等操作,不过这也破坏了原始的 ...
- Java8 Lambda表达式详解手册及实例
先贩卖一下焦虑,Java8发于2014年3月18日,距离现在已经快6年了,如果你对Java8的新特性还没有应用,甚至还一无所知,那你真得关注公众号"程序新视界",好好系列的学习一下 ...
- java8 lambda python_【学习笔记】java8 Lambda表达式语法及应用
本文是慕课网大牧莫邪老师的视频教程一课掌握Lambda表达式语法及应用的学习笔记.如果觉得内容对你有用,可以购买老师的课程支持一下,课程价格1元,十分良心了. 1. 课程介绍 2. 为什么引入Lamb ...
- 带有Java 8,lambda表达式和Mockito-Java8附加组件的更紧凑的Mockito
Mockito-Java8是一组Mockito附加组件,它们利用Java 8和lambda表达式使Mockito的模拟更加紧凑. 在2015年初,我进行了简短的演讲, Java 8为测试带来了力量! ...
- java8 Lambda表达式的应用(函数式接口、lambda表达式,方法引用及Stream API)
之前写了一篇博客简单介绍了一下java 8发布新增的一些特性功能,java 8在2014年发布,距今也不少年了,但是lambda表达式使用并不熟练,现在一边学习,一边记录一下. 目录 一.Lambda ...
最新文章
- Annotation
- AI实时特效,魔幻修图,Adobe Photoshop相机拯救PS菜鸟
- Java并发程序设计(四)JDK并发包之同步控制
- Android源码打包命令
- spring的基本配置和使用
- anaconda 安装在c盘_最省心的Python版本和第三方库管理——初探Anaconda
- 【Spark】Spark Class is not registered joins UnsafeHashedRelation kryo
- 20190909:(leetcode习题)第一个错误的版本
- mysql之创建数据库,创建数据表
- 高频电子线路实验 03 - | 环形混频与直接调频
- SSM框架原理,作用及使用方法
- JDK与JRE的区别
- 独家首发成语类智力多玩法微信小程序源码下载好玩而又强大
- 土壤数据库一些参数解释和补充说明
- 被动语态 动词的过去分词
- postgresql 数据库 update 语句的初步使用
- 今日话题:蜗居在大城市的生活
- 首阴战法胜率不高?应该是忘记加上一个大前提!
- unity鼠标键盘交互
- 【PicGo】解决picgo+github图床上传的各种问题
热门文章
- linux查看机器配置命令,linux 下查看机器配置的几个命令
- mysql执行存储过程提示out of_PHP执行MYSQL存储过程报错:Commands out of sync; you can't run...
- python判断能否组成三角形_python三角形判定怎么做
- 机器人无限火力无限e符文_LOL:无限火力开黑指南 三大玩法让你快乐加倍
- linux tcb,在Linux中从潜藏密码迁移至tcb怎么做?
- Ubuntu 16.04卸载火狐浏览器
- android 高并发弹幕,高并发实时直播弹幕研发实践
- python中scrapy可以爬取多少数据_python中scrapy框架爬取携程景点数据
- linux进程cpu时间片,能讲一下在Linux系统中时间片是怎么分配的还有优先级的具体算法是...
- 存储器是计算机的记忆装置,存储器(Memory)