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相关推荐

  1. Java8————Lambda表达式(二)

    译者注:文中内容均来自于官方教程<Lambda Expressions>,但是由于英汉语言的差异,部分语句官方描述过于冗余,因此译者根据通常状况的理解做了微调,但不会影响表达的含义.比如: ...

  2. lambda 对象去重_采用java8 lambda表达式 实现 java list 交集 并集 差集 去重复并集...

    采用java8 lambda表达式 实现java list 交集/并集/差集/去重并集 一般的javaList 交.并集采用简单的 removeAll retainAll 等操作,不过这也破坏了原始的 ...

  3. lambda学习视频和stream学习视频(Java8 Lambda表达式视频教程)-Java爬虫-网络购物的正确打开方式

    百度网盘 链接:https://pan.baidu.com/s/1upU5EVXOQeho6poDYdnhiQ 提取码:088l Java8 Lambda表达式视频教程 https://www.bil ...

  4. Java8 lambda表达式,Comparator.comparing().thenComparing()报错

    环境 Java:1.8+ 前言 今天发了一个问题: 问题描述: 对List进行排序,如果在Comparator.comparing()方法中,只使用一个字段排序,没有问题. 但是如果使用多字段排序,并 ...

  5. 采用java8 lambda表达式 实现 java list 交集 并集 差集 去重复并集

    采用java8 lambda表达式 实现java list 交集/并集/差集/去重并集 一般的javaList 交.并集采用简单的 removeAll retainAll 等操作,不过这也破坏了原始的 ...

  6. Java8 Lambda表达式详解手册及实例

    先贩卖一下焦虑,Java8发于2014年3月18日,距离现在已经快6年了,如果你对Java8的新特性还没有应用,甚至还一无所知,那你真得关注公众号"程序新视界",好好系列的学习一下 ...

  7. java8 lambda python_【学习笔记】java8 Lambda表达式语法及应用

    本文是慕课网大牧莫邪老师的视频教程一课掌握Lambda表达式语法及应用的学习笔记.如果觉得内容对你有用,可以购买老师的课程支持一下,课程价格1元,十分良心了. 1. 课程介绍 2. 为什么引入Lamb ...

  8. 带有Java 8,lambda表达式和Mockito-Java8附加组件的更紧凑的Mockito

    Mockito-Java8是一组Mockito附加组件,它们利用Java 8和lambda表达式使Mockito的模拟更加紧凑. 在2015年初,我进行了简短的演讲, Java 8为测试带来了力量! ...

  9. java8 Lambda表达式的应用(函数式接口、lambda表达式,方法引用及Stream API)

    之前写了一篇博客简单介绍了一下java 8发布新增的一些特性功能,java 8在2014年发布,距今也不少年了,但是lambda表达式使用并不熟练,现在一边学习,一边记录一下. 目录 一.Lambda ...

最新文章

  1. Annotation
  2. AI实时特效,魔幻修图,Adobe Photoshop相机拯救PS菜鸟
  3. Java并发程序设计(四)JDK并发包之同步控制
  4. Android源码打包命令
  5. spring的基本配置和使用
  6. anaconda 安装在c盘_最省心的Python版本和第三方库管理——初探Anaconda
  7. 【Spark】Spark Class is not registered joins UnsafeHashedRelation kryo
  8. 20190909:(leetcode习题)第一个错误的版本
  9. mysql之创建数据库,创建数据表
  10. 高频电子线路实验 03 - | 环形混频与直接调频
  11. SSM框架原理,作用及使用方法
  12. JDK与JRE的区别
  13. 独家首发成语类智力多玩法微信小程序源码下载好玩而又强大
  14. 土壤数据库一些参数解释和补充说明
  15. 被动语态 动词的过去分词
  16. postgresql 数据库 update 语句的初步使用
  17. 今日话题:蜗居在大城市的生活
  18. 首阴战法胜率不高?应该是忘记加上一个大前提!
  19. unity鼠标键盘交互
  20. 【PicGo】解决picgo+github图床上传的各种问题

热门文章

  1. linux查看机器配置命令,linux 下查看机器配置的几个命令
  2. mysql执行存储过程提示out of_PHP执行MYSQL存储过程报错:Commands out of sync; you can't run...
  3. python判断能否组成三角形_python三角形判定怎么做
  4. 机器人无限火力无限e符文_LOL:无限火力开黑指南 三大玩法让你快乐加倍
  5. linux tcb,在Linux中从潜藏密码迁移至tcb怎么做?
  6. Ubuntu 16.04卸载火狐浏览器
  7. android 高并发弹幕,高并发实时直播弹幕研发实践
  8. python中scrapy可以爬取多少数据_python中scrapy框架爬取携程景点数据
  9. linux进程cpu时间片,能讲一下在Linux系统中时间片是怎么分配的还有优先级的具体算法是...
  10. 存储器是计算机的记忆装置,存储器(Memory)