好久没有更新啦,继续继续。

最近这个项目陷入了一个使用语言的怪圈。任何东西都想着原来的写法怎么能翻译到新的JDK 的写法。这其实就走入了歧途哇哇哇。

看下面这个例子,是一个很简单的例子。一般情况下我们都会这么写这样的逻辑。

 public static void main(String ... args) {List<String> list = new ArrayList<>();list.add("a");list.add("b");for (String str: list) {// 复杂逻辑处理}}

在JDK8中是可以利用Aggregate来写的,也就是会变成这样:

 public static void main(String ... args) {List<String> list = new ArrayList<>();list.add("a");list.add("b");list.forEach(t -> // 这里写逻辑t.getBytes());}

其实,这算是一个强加的写法,原来的for逻辑有啥不好,干嘛非得要弄成上面那样写呢?

好,举一个好的例子吧。

想这么一个场景:

首先,我们的系统很大,有需要使用code取得name的处理,这个处理是一个公共处理,提供的In的interface是一个List<ADto>,其中ADto.java是一个领域模型,而返回的结果是一个List<BDto>,其中BDto.java也是一个领域模型。也就是这个公共处理可以批量接受code,批量返回name。

假设ADto.java :

public class ADto {private String code;private String status;public String getCode() {return code;}public void setCode(String code) {this.code = code;}public String getStatus() {return status;}public void setStatus(String status) {this.status = status;}}

BDto.java:

public class BDto {private String name;private String validTime;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getValidTime() {return validTime;}public void setValidTime(String validTime) {this.validTime = validTime;}}

我们的Service.java:

public class Service {public static List<BDto> returnNames(List<ADto> list) {// 逻辑省略// 采用guava的List生成方式return Lists.newArrayList(Arrays.asList(new BDto()));}}

调用类以前怎么写?:

     ADto a = new ADto();a.setCode("code");a.setStatus("status");List<ADto> lista = new ArrayList<>();lista.add(a);List<BDto> listb = Service.returnNames(lista);UserBean bean = new UserBean();if (null != listb) {// 把得到的name设置到inputme这个字段bean.setInputme(listb.get(0).getName());} 

而这个场景才是Lambda和Aggregate该发挥用处的时候,采用JDK8 + guava后怎么样呢?

     ADto a = new ADto();a.setCode("code");a.setStatus("status");UserBean bean = new UserBean();// 注意 这里的returnNames方法不能返回一个null,否则在.stream的时候直接就nullPointer了Service.returnNames(Lists.newArrayList(Arrays.asList(a))).stream().findFirst().ifPresent(t -> bean.setInputme(t.getName()));

从名字可以看出来,findFirst可以获得第一条数据,ifPresent中可以调用的是一个函数式接口,这个ifPresent也是JDK8中的新方法,一般情况下ifPresent其实可以直接理解为判断null,当不是null的时候即执行后面的Lambda表达式,表达式需要做的就是取得第一个的BDto的Name然后设置到bean的inputme当中去即可。这样的运用才是有效的才是有美感的使用。不要套用,要活用。

文章来自 blog.csdn.net/forevervip

つづく・・・ 

JDK8的随笔(07)_行云流水般的Lambda表达式相关推荐

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

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

  2. python学习笔记07:函数与lambda表达式深度解析

    目录 1 函数基础 1.1 标准函数的定义 1.2  求两个数的最大值的函数示例 1.3 返回多个值--求一个列表的数的和值.平均值 1.4 递归函数 2 函数参数 2.1 位置参数(position ...

  3. java lambda表达式_高性能的 Lambda 表达式,简洁优雅图文并茂

    来源:知乎 Mingqi 链接:https://www.zhihu.com/question/20125256/answer/324121308 有网友问,Lambda 表达式有何用处?如何使用?在P ...

  4. Java基础_面向对象,Lambda 表达式

    面向对象 类,对象 类是对象的抽象,对象是类的具体,类是概念模型,定义对象的所有特性和所需的操作,对象是真实的模型,是一个具体的实体 1.显式创建对象 //最为常用 Object object = n ...

  5. lambda表达式python菜鸟教程_[c#菜鸟]lambda表达式

    what 一.定义 Lambda 表达式是一种可用于创建 委托 或 表达式目录树 类型的 匿名函数 .通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数.(微软) 理 ...

  6. Lambda表达式(简单解析)

    Lambda表达式 Lambda表达式其实是JDK8的一个新特性.所谓Lambda表达式指的是应用在单一抽象方法接口环境下的一种简化定义形式,可以用于解决匿名内部类中定义复杂的问题. 我们先来看一段代 ...

  7. Java 8:一文掌握 Lambda 表达式 | CSDN 博文精选

    作者 | Android 大强哥 责编 | 郭芮 出品 | CSDN 博客 本文将介绍 Java 8 新增的 Lambda 表达式,包括 Lambda 表达式的常见用法以及方法引用的用法,并对 Lam ...

  8. foreach jdk8 递归_[Java 8] (8) Lambda表达式对递归的优化(上) - 使用尾递归 .

    递归优化 很多算法都依赖于递归,典型的比如分治法(Divide-and-Conquer).但是普通的递归算法在处理规模较大的问题时,常常会出现StackOverflowError.处理这个问题,我们可 ...

  9. Lambda表达式,Stream流,方法引用,Base64(JDK8新特性)

    Labda表达式 Lambda表达式演示 Lanbda表达式:是JDK1.8提出的一种新语法.是对之前的某种情况的代码的"简化写法". Lambda表达式演示: public cl ...

最新文章

  1. Micropython实例之TPYBoardv102开发板DIY照相机
  2. C#数组按值和按引用传递数组区别
  3. linux mysql安装失败 lib冲突问题_Linux 安装 Mysql 冲突 问题
  4. SQL Server中把查询出来的结果重新编号作为一列
  5. [原创]按键小精灵通用去广告破解补丁
  6. Kubernetes之yaml文件
  7. 【算法】欧拉图,欧拉回路,Eular Circuit,随机生成欧拉图,搜索欧拉回路
  8. ImmuniWeb 推出暗网数据泄露免费查询工具,使用超简单
  9. 计算机毕业设计ssm高校选课系统uu27m系统+程序+源码+lw+远程部署
  10. VARCHAR2 与 NVARCHAR2 区别
  11. 利用selenium模拟登录webqq
  12. 解决方法:python下载慢,pycharm下载慢,anaconda下载慢,百度网盘链接分享给你备用
  13. 云计算机技术与应用学什么的,云计算技术与应用专业学什么 主要课程
  14. 控制器Ryu+Mininet完成集线器、自学习交换机、流量监控实例开发
  15. excel冻结窗格参与排序_冻结窗格以在Excel中隐藏行
  16. 第三方rom 6.0刷机后,网络连接叹号处理方法
  17. excel填充序列_表格技巧—Excel表格中如何一键下拉填充
  18. UE4.27 基于composure的虚拟制片
  19. 为什么Elasticsearch查询变得这么慢了?
  20. 浏览器兼容性总结: IE 火狐 谷歌 360 搜狗

热门文章

  1. FilterListener
  2. linux开放端口权限
  3. 贪吃蛇智能版(专家)
  4. 业余时间还可以这样兼职赚钱
  5. Linux查看Tomcat端口
  6. 工信部软件测试工程师与软考的区别,软考资格证书与职称证书的区别与联系
  7. 自学Java需要多长时间?
  8. 金匮要略重点复习资料
  9. 测试架构师:5 测试策略实战攻略
  10. 引流虚拟主机和服务器,2020微商引流客源_虚拟主机对SEO