Lambda化的一个例子
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化的一个例子相关推荐
- 电子圈存的秘密——去中心化的一个例子
之前听说有一种消费叫插卡消费,也即闪付:总感觉挺鸡肋的,因为我们明明可以刷卡.最近突然想明白了,分享之. 插卡消费与刷卡消费的过程对比: 刷卡消费:刷卡后刷卡机读取卡片的身份信息,与交易详情.用户密码 ...
- R语言使用lm构建线性回归模型、并将目标变量对数化(log10)实战:可视化模型预测输出与实际值对比图、可视化模型的残差、模型预测中系统误差的一个例子 、自定义函数计算R方指标和均方根误差RMSE
R语言使用lm构建线性回归模型.并将目标变量对数化(log10)实战:可视化模型预测输出与实际值对比图.可视化模型的残差.模型预测中系统误差的一个例子 .自定义函数计算R方指标和均方根误差RMSE 目 ...
- Java 回调函数(传统方法和lambda方法)-一个例子秒懂
原文地址为: Java 回调函数(传统方法和lambda方法)-一个例子秒懂 背景: 想写一个工具类 Tool.java ,其中方法 public void readOneLine() 负责一行一行地 ...
- 如何Docker化任意一个应用
网上有很多关于如何将应用Docker化的教程,为什么我还要再写一个呢? \\ 我见过的大部分教程都是限定在某种特定技术(例如Java或者Python),可能无法满足读者的需求.同时,这些教程也没有说清 ...
- 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),想根 ...
- UA MATH566 统计理论7 一个例子:推导T检验
UA MATH566 统计理论7 一个例子:推导T检验 T检验在math 571A和math 571B中已经用的很多了,这里按前两讲介绍的假设检验的理论回顾一下T检验,看一下T检验是怎么用似然比检验的 ...
- 通过rxjs的一个例子, 来学习SwitchMap的使用方法
switchMap相关文章 rxjs里switchMap operators的用法 通过rxjs的一个例子, 来学习SwitchMap的使用方法 rxjs switchMap的实现原理 rxjs的ma ...
- SDN精华问答 | 使用SDN的一个例子
SDN火热了好一阵子,无论运营商.政府企业.投资机构,一段时间,不知道SDN.不能甩几个SDN相关的名词术语,似乎都落后于时代了.今天,就来看看关于SDN的精华问答吧. 1 Q:为什么会出现SDN呢? ...
- 《游戏设计师修炼之道:数据驱动的游戏设计》一2.3 创建漏洞:一个例子
2.3 创建漏洞:一个例子 现在,让我们使用上文提到的所有项目设计一个场景,通过实际演练来了解善意程序造成的恶劣后果.本章开始提到的电子邮件程序就是个好例子.稍后,我们将按照SDLC的所有步骤,来看看 ...
最新文章
- js基础(数组)--数组类型、类数组对象、作为数组的字符串
- mint ui tabbar选中后怎么改变icon图标_UI全书(下)读后梳理:iPhone设计规范和Material Design规范...
- 数据源 连接oracle
- Python HTMLCalendar类| 带有示例的formatyearpage()方法
- java多进程_Java中创建多进程
- 希尔排序和归并排序(java实现)
- 安装Docker,配置阿里云加速和 docker-compose 国内镜像
- springmvc入门程序
- 如何做好产品路标规划?这篇文章告诉你答案
- JDBC驱动(类型)
- html如何添加微信好友,如何加微信好友,微信加人小妙招
- Android外部存储设备管理——vold挂载大容量存储设备
- wifi无法获取ip地址的解决方法
- 【交互设计】什么是微交互
- 计算机蓝屏显示的英文是什么,电脑蓝屏出现一堆英文怎么解决?
- python鼠标点击事件event_opencv-python教程学习系列5-处理鼠标事件
- 小红书笔记api_小红书笔记怎么写?
- Mybatis配置文件http://mybatis.org/dtd/mybatis-3-config.dtd报错
- 我的元旦是这么过来的
- Hashing哈希函数(Introduction to Algorithms, 算法导论,CLRS)学习笔记