2019独角兽企业重金招聘Python工程师标准>>>

计算用户购买专辑的一些有用属性,如音乐家人数、曲目和专辑时长等

命令式的实现:

public long countRunningTime() {long count = 0;for (Album album : albums) {for (Track track : album.getTracks()) {count += track.getLength();}}return count;
}public long countMusicians() {long count = 0;for (Album album : albums) {count += album.getMusicians().size();}return count;
}public long countTracks() {long count = 0;for (Album album : albums) {count += album.getTracks().size();}return count;
}

没有重用公有的概念,写出了更多代码需要测试和维护

使用流重构命令式的代码:

public long countRunningTime() {return albums.stream().mapToLong(album -> album.getTracks().stream().mapToLong(track -> track.getLength()).sum()).sum();
}public long countMusicians() {return albums.stream().mapToLong(album -> album.getMusicians().size()).sum();
}public long countTracks() {return albums.stream().mapToLong(album -> album.getTracks().size()).sum();
}

这段代码仍有重用可读性的问题,因为有一些抽象和共性只能使用领域内的只是来表达

使用领域方法重构:

public long countFeature(ToLongFunction<Album> function) {return albums.stream().mapToLong(function).sum();
}public long countRunningTime() {return countFeature(album -> album.getTracks().stream().mapToLong(track -> track.getLength()).sum());
}public long countMusicians() {return countFeature(album -> album.getMusicians().size());
}public long countTracks() {return countFeature(album -> album.getTracks().size());
}

转载于:https://my.oschina.net/u/3198904/blog/1789170

Lambda化的一个例子相关推荐

  1. 电子圈存的秘密——去中心化的一个例子

    之前听说有一种消费叫插卡消费,也即闪付:总感觉挺鸡肋的,因为我们明明可以刷卡.最近突然想明白了,分享之. 插卡消费与刷卡消费的过程对比: 刷卡消费:刷卡后刷卡机读取卡片的身份信息,与交易详情.用户密码 ...

  2. R语言使用lm构建线性回归模型、并将目标变量对数化(log10)实战:可视化模型预测输出与实际值对比图、可视化模型的残差、模型预测中系统误差的一个例子 、自定义函数计算R方指标和均方根误差RMSE

    R语言使用lm构建线性回归模型.并将目标变量对数化(log10)实战:可视化模型预测输出与实际值对比图.可视化模型的残差.模型预测中系统误差的一个例子 .自定义函数计算R方指标和均方根误差RMSE 目 ...

  3. Java 回调函数(传统方法和lambda方法)-一个例子秒懂

    原文地址为: Java 回调函数(传统方法和lambda方法)-一个例子秒懂 背景: 想写一个工具类 Tool.java ,其中方法 public void readOneLine() 负责一行一行地 ...

  4. 如何Docker化任意一个应用

    网上有很多关于如何将应用Docker化的教程,为什么我还要再写一个呢? \\ 我见过的大部分教程都是限定在某种特定技术(例如Java或者Python),可能无法满足读者的需求.同时,这些教程也没有说清 ...

  5. UA MATH566 统计理论7 另一个例子:二项检验

    UA MATH566 统计理论7 另一个例子:二项检验 假设X1,X2,⋯,Xn∼Ber(p)X_1,X_2,\cdots,X_n \sim Ber(p)X1​,X2​,⋯,Xn​∼Ber(p),想根 ...

  6. UA MATH566 统计理论7 一个例子:推导T检验

    UA MATH566 统计理论7 一个例子:推导T检验 T检验在math 571A和math 571B中已经用的很多了,这里按前两讲介绍的假设检验的理论回顾一下T检验,看一下T检验是怎么用似然比检验的 ...

  7. 通过rxjs的一个例子, 来学习SwitchMap的使用方法

    switchMap相关文章 rxjs里switchMap operators的用法 通过rxjs的一个例子, 来学习SwitchMap的使用方法 rxjs switchMap的实现原理 rxjs的ma ...

  8. SDN精华问答 | 使用SDN的一个例子

    SDN火热了好一阵子,无论运营商.政府企业.投资机构,一段时间,不知道SDN.不能甩几个SDN相关的名词术语,似乎都落后于时代了.今天,就来看看关于SDN的精华问答吧. 1 Q:为什么会出现SDN呢? ...

  9. 《游戏设计师修炼之道:数据驱动的游戏设计》一2.3 创建漏洞:一个例子

    2.3 创建漏洞:一个例子 现在,让我们使用上文提到的所有项目设计一个场景,通过实际演练来了解善意程序造成的恶劣后果.本章开始提到的电子邮件程序就是个好例子.稍后,我们将按照SDLC的所有步骤,来看看 ...

最新文章

  1. js基础(数组)--数组类型、类数组对象、作为数组的字符串
  2. mint ui tabbar选中后怎么改变icon图标_UI全书(下)读后梳理:iPhone设计规范和Material Design规范...
  3. 数据源 连接oracle
  4. Python HTMLCalendar类| 带有示例的formatyearpage()方法
  5. java多进程_Java中创建多进程
  6. 希尔排序和归并排序(java实现)
  7. 安装Docker,配置阿里云加速和 docker-compose 国内镜像
  8. springmvc入门程序
  9. 如何做好产品路标规划?这篇文章告诉你答案
  10. JDBC驱动(类型)
  11. html如何添加微信好友,如何加微信好友,微信加人小妙招
  12. Android外部存储设备管理——vold挂载大容量存储设备
  13. wifi无法获取ip地址的解决方法
  14. 【交互设计】什么是微交互
  15. 计算机蓝屏显示的英文是什么,电脑蓝屏出现一堆英文怎么解决?
  16. python鼠标点击事件event_opencv-python教程学习系列5-处理鼠标事件
  17. 小红书笔记api_小红书笔记怎么写?
  18. Mybatis配置文件http://mybatis.org/dtd/mybatis-3-config.dtd报错
  19. 我的元旦是这么过来的
  20. Hashing哈希函数(Introduction to Algorithms, 算法导论,CLRS)学习笔记

热门文章

  1. 学习响应式BootStrap来写融职教育网站,Bootsrtap第九天手粉琴swiper特效
  2. Tapestry框架概述
  3. 使用vue制作富文本框
  4. caffe特征提取/C++数据格式转换
  5. 一起学React--组件定义和组件通讯
  6. 【Android压力测试】monkey压力测试
  7. Robot framework 引入 Selenium2Library 类库:
  8. 够快云库, 加速企业信息化建设
  9. Python的可变类型与不可变类型
  10. nfs文件共享+netstat相关 记录