使用Java委託實現面向函式式語言中的map/filter
類似Python 這樣面向函式式functional語言提供Map/Filter這些函式來實現FP風格程式設計,好處是在高層次上能夠降低程式碼的複雜性(降低如何做How的複雜性)。
那麼如果我們要獲得集合spam輸出,無疑要遍歷這個集合:
而使用map函式,就只需一句話:
2.filter(coll, f) 類似map功能,遍歷這個集合,呼叫f,當f返回是真條件,才會把結果放入返回集合中。
map/filter真的幫助我們減少了大量迴圈遍歷垃圾編碼的編寫,還有更多精簡功能:
比如你有一個使用者集合,你需要返回使用者的id,作為id集合返回;然後你又需要返回使用者的姓名name集合,每個功能你都要實現一遍,如果再要返回使用者的年齡集合,你又要做一遍,瑣碎細節程式碼充斥在軟體系統中。
其中介面MapDelegate如下:
客戶端使用:
以上程式碼我經過除錯可執行。程式碼見下面附件。
Use delegation to write map/filter in Java(需要翻牆)一文談了如何使用Java的泛型,透過委託模式來實現面向函式式語言中的Map/Filter類似功能。
首先看一下Map/Filter意思:
1.map(coll, f):透過遍歷集合coll,, 呼叫集合中每個元素f的方法, 將f的方法處理結果裝入一個集合返回。
假設Python有一個集合spam 和eggs方法,
spam = ['pork','ham','spices'] numbers = [1,2,3,4,5] def eggs(item): return item <p class="indent"> |
那麼如果我們要獲得集合spam輸出,無疑要遍歷這個集合:
for i in spam: L.append(i) print L <p class="indent"> |
而使用map函式,就只需一句話:
L = map(eggs, spam) print L <p class="indent"> |
2.filter(coll, f) 類似map功能,遍歷這個集合,呼叫f,當f返回是真條件,才會把結果放入返回集合中。
map/filter真的幫助我們減少了大量迴圈遍歷垃圾編碼的編寫,還有更多精簡功能:
比如你有一個使用者集合,你需要返回使用者的id,作為id集合返回;然後你又需要返回使用者的姓名name集合,每個功能你都要實現一遍,如果再要返回使用者的年齡集合,你又要做一遍,瑣碎細節程式碼充斥在軟體系統中。
Use delegation to write map/filter in Java一文透過使用泛型和一個委託介面MapDelegate類來實現map函式,如下:
public class Mapper { <FromType, ToType> List<ToType> map(List<FromType> list, MapDelegate<FromType, ToType> mapDelegate) { List<ToType> retval = new ArrayList<ToType>(list.size()); for (FromType item : list) { retval.add(mapDelegate.map(item)); } return retval; } } <p class="indent"> |
其中介面MapDelegate如下:
public interface MapDelegate<FromType, ToType> { ToType map(FromType obj); } <p class="indent"> |
客戶端使用:
public static void main(String[] args) { List qs = new ArrayList(); qs.add(new Q("afv")); qs.add(new Q("edsd")); qs.add(new Q("eedd")); Mapper mapper = new Mapper(); List<String> ids = mapper.map(qs, new MapDelegate<Q, String>() { public String map(Q q) { return new StringBuilder(q.getV()).toString(); } }); System.out.print("ids=" + ids.get(1)); } <p class="indent"> |
以上程式碼我經過除錯可執行。程式碼見下面附件。
[該貼被banq於2010-03-02 15:22修改過]
相關文章
- C#使用委託實現函式回撥,方法呼叫攔截C#函式
- c語言中通過函式指標實現函式過載C語言函式指標
- 淺談C語言中函式的使用C語言函式
- 委託、Lambda表示式、事件系列07,使用EventHandler委託事件
- Python 擴充之特殊函式(lambda 函式,map 函式,filter 函式,reduce 函式)Python函式Filter
- lambda匿名函式sorted排序函式filter過濾函式map對映函式函式排序Filter
- C 語言中返回字串函式的四種實現方法字串函式
- C 語言中的 time 函式函式
- C語言中的abort函式C語言函式
- JavaScript(1)高階函式filter、map、reduceJavaScript函式Filter
- javascript高階函式---filter---map---reduceJavaScript函式Filter
- Swift集合函式:Reduce、Map、FlatMap、FilterSwift函式Filter
- C語言中函式printf()和函式scanf()的用法C語言函式
- 基礎拾遺---委託,匿名函式,lambda函式
- 委託、Lambda表示式、事件系列06,使用Action實現觀察者模式,體驗委託和事件的區別事件模式
- C語言中qsort函式的用法C語言函式
- 委託、Lambda表示式、事件系列03,從委託到Lamda表示式事件
- python之高階函式map,reduce,filter用法Python函式Filter
- 理解Swift高階函式之map, filter, reduceSwift函式Filter
- linux下C語言中的mkdir函式與rmdir函式LinuxC語言函式
- Kotlin委託 & 擴充套件 & 高階函式Kotlin套件函式
- C語言中函式的返回值C語言函式
- dart系列之:dart語言中的函式Dart函式
- [靈性程式設計]函式委託,自動事件,函式觀察者(golang)程式設計函式事件Golang
- 用Map+函式式介面來實現策略模式函式模式
- C語言中抽象函式與具體實現的命名與組織C語言抽象函式
- 委託、Lambda表示式、事件系列01,委託是什麼,委託的基本用法,委託的Method和Target屬性事件
- 詳細對比C語言中的chmod()函式和fchmod()函式C語言函式
- C# 委託(delegate)、泛型委託和Lambda表示式C#泛型
- Dotnet的區域性函式和委託的對比函式
- [靈性程式設計]函式委託,自動事件程式設計函式事件
- 詳解C#委託,事件與回撥函式C#事件函式
- winform實現委託ORM
- C語言中關於時間的函式函式
- C語言中的 static變數、static函式C語言變數函式
- 委託、Lambda表示式、事件系列04,委託鏈是怎樣形成的, 多播委託, 呼叫委託鏈方法,委託鏈異常處理事件
- 委託、Lambda表示式、事件系列05,Action委託與閉包事件
- zt 對C#下函式,委託,事件的一點理解!C#函式事件