Lambda化的一个例子
生活随笔
收集整理的這篇文章主要介紹了
Lambda化的一个例子
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
2019獨角獸企業(yè)重金招聘Python工程師標準>>>
計算用戶購買專輯的一些有用屬性,如音樂家人數(shù)、曲目和專輯時長等
命令式的實現(xiàn):
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(); }這段代碼仍有重用可讀性的問題,因為有一些抽象和共性只能使用領域內(nèi)的只是來表達
使用領域方法重構:
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化的一个例子的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TiKV 在饿了么的大规模应用实践
- 下一篇: [Guava]-使用Iterators进